首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将消息从DLL传递到应用程序

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

Stack Overflow用户
提问于 2010-10-08 17:47:04
回答 3查看 2.2K关注 0票数 0

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

为了总结,我想从DLL向MFC应用程序传递一条消息。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-08 17:51:19

您可以使用Windows API SendMessagePostMessage

票数 4
EN

Stack Overflow用户

发布于 2010-10-08 18:11:28

您尝试过使用Windows messages吗?

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

代码语言:javascript
复制
const UINT WM_YOUR_CUSTOM_MESSAGE = ::RegisterWindowMessage(_T("Your_custom_message"));

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

代码语言:javascript
复制
WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 

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

将消息发送到所有窗口,如下所示:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2010-10-08 19:36:46

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

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

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

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

通过Process Enumeration可以找到您的应用程序正在运行的实例数量

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3889403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档