如何将消息从DLL传递给Application

时间:2010-10-08 09:47:04

标签: c++ windows mfc atl

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

要Sumarize,我想将一条消息从DLL传递给MFC应用程序。

3 个答案:

答案 0 :(得分:4)

您可以使用Windows API SendMessagePostMessage

答案 1 :(得分:2)

您是否尝试过使用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)

您将邮件发送到所有窗口,如下所示:

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值。

答案 2 :(得分:2)

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

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

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

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

Process Enumeration

可以确定运行应用程序的实例数