Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将消息从DLL传递到应用程序_C++_Windows_Mfc_Atl - Fatal编程技术网

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

C++ 如何将消息从DLL传递到应用程序,c++,windows,mfc,atl,C++,Windows,Mfc,Atl,我有一个ATLCOM外壳扩展,它将右键单击扩展添加到Windows资源管理器。如何将消息从DLL传递到另一个MFC应用程序 总之,我想将一条消息从DLL传递到MFC应用程序。您可以使用Windows APISendMessage或PostMessage您尝试过使用Windows消息吗 您可以定义自己的自定义消息,如下所示: const UINT WM_YOUR_CUSTOM_MESSAGE = ::RegisterWindowMessage(_T("Your_custom_message"));

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


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

您可以使用Windows API
SendMessage
PostMessage

您尝试过使用Windows消息吗

您可以定义自己的自定义消息,如下所示:

const UINT WM_YOUR_CUSTOM_MESSAGE = ::RegisterWindowMessage(_T("Your_custom_message"));
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
您通过标准WindowProc()函数接收消息:

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

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

const UINT WM_YOUR_CUSTOM_MESSAGE = ::RegisterWindowMessage(_T("Your_custom_message"));
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值。

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

对于零应用程序,DLL必须调用CreateProcess。CreateProcess允许DLL将命令行参数传递给MFC应用程序

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

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


了解应用程序正在运行的实例数是通过Emm。。。为什么
PostMessage()。您发送一条消息,该应用程序在其消息循环中检索该消息。如何在MFC应用程序中检索mssage?在发送或发布消息时,我应该将消息发送或发布给谁?@Subhen:带有消息地图。请参阅以获取解释。我假设您已经知道另一个应用程序(即它正在运行,并且您有它的HWND。毕竟不能向僵尸发送消息),但是我如何从另一个应用程序检索此Mesage