gpt4 book ai didi

c++ - 如何在控制台应用程序中使用仅消息窗口接收消息?

转载 作者:可可西里 更新时间:2023-11-01 13:08:43 33 4
gpt4 key购买 nike

我创建了一个简单的 Win32 控制台应用程序,它创建了一个隐藏的仅消息窗口并等待消息,完整代码如下。

#include <iostream>
#include <Windows.h>

namespace {
LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_COPYDATA)
std::cout << "Got a message!" << std::endl;
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
}

int main()
{
WNDCLASS windowClass = {};
windowClass.lpfnWndProc = WindowProcedure;
LPCWSTR windowClassName = L"FoobarMessageOnlyWindow";
windowClass.lpszClassName = windowClassName;
if (!RegisterClass(&windowClass)) {
std::cout << "Failed to register window class" << std::endl;
return 1;
}
HWND messageWindow = CreateWindow(windowClassName, 0, 0, 0, 0, 0, 0, HWND_MESSAGE, 0, 0, 0);
if (!messageWindow) {
std::cout << "Failed to create message-only window" << std::endl;
return 1;
}

MSG msg;
while (GetMessage(&msg, 0, 0, 0) > 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

但是,我没有收到来自其他应用程序的任何消息。 GetMessage() 只会阻塞而不会返回。我在发送消息的应用程序中使用具有相同类名的 FindWindowEx(),它找到了窗口。只是消息显然从未收到。

我是不是做错了什么?可以接收窗口消息的最小应用程序是什么?

最佳答案

您的消息可能被 User Interface Privilege Isolation 屏蔽.在这种情况下,您可以使用 ChangeWindowMessageFilterEx()允许 WM_COPYDATA 消息通过的函数。

关于c++ - 如何在控制台应用程序中使用仅消息窗口接收消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448437/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com