Gewusst wie: empfangen von Nachrichten über eine message-Fenster nur in einer Konsolenanwendung?

Ich habe eine einfache Win32-Konsolen-Anwendung, erstellt eine versteckte Nachricht nur Fenster und wartet auf Meldungen, der vollständige code ist unten.

#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;
}

Aber ich erhalte keine Nachrichten von einer anderen Anwendung. GetMessage() nur blockiert und kehrt nie zurück. Ich benutze FindWindowEx() mit dem gleichen class Namen in der Anwendung, die eine Nachricht sendet, und er findet das Fenster. Nur die Botschaft ist offenbar noch nie empfangen.

Mache ich etwas falsch hier? Was ist die minimale Anwendung, erhalten Fenster-Nachrichten?

  • Gibt es irgendein Grund, warum Sie sind casting WindowProcedure es? Wie es aussieht ist es schon eine WNDPROC.
  • Du hast Recht, scheint nicht notwendig zu sein.
InformationsquelleAutor futlib | 2013-05-08
Schreibe einen Kommentar