Ho creato una semplice applicazione console Win32 che crea una finestra di solo messaggio nascosta e attende i messaggi, il codice completo è riportato di seguito.Come ricevere messaggi utilizzando una finestra di solo messaggio in un'applicazione console?
#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;
}
Tuttavia, non ricevo alcun messaggio da un'altra applicazione. GetMessage()
solo blocchi e non ritorna mai. Io uso FindWindowEx()
con lo stesso nome di classe nell'applicazione che invia un messaggio e trova la finestra. Solo il messaggio sembra non essere mai ricevuto.
Sto facendo qualcosa di sbagliato qui? Qual è l'applicazione più minimale in grado di ricevere i messaggi della finestra?
c'è qualche ragione per cui sei Lanciare WindowProcedure lì? Sembra che sia già un WNDPROC. – HerrJoebob
@HerrJoebob Hai ragione, non sembra necessario. – futlib