如何将消息从 DLL 传递到应用程序

Posted

技术标签:

【中文标题】如何将消息从 DLL 传递到应用程序【英文标题】:How Can I pass message from DLL to Application 【发布时间】:2010-10-08 09:47:03 【问题描述】:

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

总结一下,我想将消息从 DLL 传递到 MFC 应用程序。

【问题讨论】:

Emm...为什么PostMessage()不够用? @sharptooth,你的意思是我会从 DLL 中发布消息吗?如何在 MFC 应用程序中检索它? 这是一个选项。您发送一条消息,该应用程序在其消息循环中检索它。 【参考方案1】:

您可以使用 Windows API SendMessagePostMessage

【讨论】:

如何在 MFC 应用程序中检索 mssage?在发送或张贴消息时,我应该发送或张贴到哪里或谁? @Subhen:带有消息映射。有关说明,请参阅vcfaq.mvps.org/mfc/12.htm。我假设你已经知道另一个应用程序(即它运行,并且你有它的 HWND。毕竟不能向僵尸发送消息)【参考方案2】:

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

您可以像这样定义自己的自定义消息:

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

您在标准的 WindowProc() 函数中收到消息:

WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 

您可以通过覆盖接收应用程序中的 CWnd::WindowProc() 函数来添加一个(在 MFC 对话框应用程序的对话框中使用类向导,或在单/多文档 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 值。

【讨论】:

但是我将如何从另一个应用程序中检索此消息【参考方案3】:

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

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

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

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

通过Process Enumeration了解您的应用程序有多少实例正在运行

【讨论】:

以上是关于如何将消息从 DLL 传递到应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从非托管应用程序传递到 C# COM DLL

如何将 unsigned short* 从 Visual-C++ DLL 传递到 VB.NET

将对象从dll文件传递到文件asp.net c#后面的代码

C++ 将字符串传递到 C# dll

如何安全地将字符串引用从 c# 传递到 c++?

如何实现消息传递通知iOS