2010-10-08 43 views
0

我有一个ATLCOM Shell扩展,它将右键单击扩展添加到Windows资源管理器。如何将我的DLL消息传递给另一个MFC应用程序。如何将消息从DLL传递到应用程序

对于Sumarize,我想将消息从DLL传递给MFC应用程序。

+1

电解金属锰实现...为什么'PostMessage的()'还不够吗? – sharptooth 2010-10-08 09:52:02

+0

@ sharptooth,你的意思是我会从DLL中发布消息吗?我如何在MFC应用程序中检索它? – Simsons 2010-10-08 09:59:05

+0

这是一个选项。您发送一条消息,该应用程序将在其消息循环中进行检索。 – sharptooth 2010-10-08 10:35:02

回答

3

您可以使用Windows API SendMessagePostMessage

+0

如何检索MFC应用程序中的消息?在发送或发布消息时,我应该向谁发送或发送消息? – Simsons 2010-10-08 10:00:12

+1

@Subhen:带有消息映射。有关解释,请参阅http://vcfaq.mvps.org/mfc/12.htm。我假设你已经知道另一个应用程序(即它运行,并且你有它的HWND,毕竟不能将消息发送给僵尸) – MSalters 2010-10-08 11:30:53

1

您是否尝试过使用Windows消息?

你可以定义你自己喜欢这个自定义消息:)

const UINT WM_YOUR_CUSTOM_MESSAGE = ::RegisterWindowMessage(_T("Your_custom_message")); 

你在一个标准的WindowProc收到消息(功能:

WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 

您可以通过重写的CWnd添加一个::您的接收应用程序中的WindowProc()函数(在MFC对话框应用程序中的对话框中使用classwizard,或者在单个/多个文档MFC应用程序中使用MainFrm)

您se ND消息给所有类似的窗口:

ULONG ulRC = BSM_APPLICATIONS; 
BroadcastSystemMessage(BSF_IGNORECURRENTTASK | BSF_FORCEIFHUNG, // do not send message to this process and don't hang 
         &ulRC,     // broadcast only to applications 
         WM_YOUR_CUSTOM_MESSAGE,  // message registered in previous step 
         0,      // wParam message-specific value 
         0);      // lParam message-specific value 

如果您需要传递与消息的一些信息,还可以利用消息在wParam和lParam的值。

+0

但是我如何从另一个应用程序中检索这个插件 – Simsons 2010-10-08 10:19:45

1

现在的答案有一个很大的假设。您通常发送消息到进程,而不是应用程序。这是一个巨大的差异。可能有零个,一个或多个MFC应用程序正在运行。

在零应用程序的情况下,DLL将不得不调用CreateProcess。 CreateProcess允许DLL将命令行参数传递给你的MFC应用程序。

对于一个MFC应用程序,上面提供的基于消息的解决方案将工作。

对于多个正在运行的MFC应用程序,它们将具有不同的HWND。 DLL通过挑选哪个HWND来发送消息来选择应用程序。选择HWND的逻辑超出了这个问题的范围。一个常见的解决方案是将消息发送到所有正在运行的实例的HWND。

找出应用程序的多少实例正在运行由Process Enumeration

相关问题