Windows Nachrichten in DLL empfangen
-
Hallo,
ich habe ein kleines Problem. Ich habe eine DLL, die von einem QT-Programm aufgerufen wird. In dieser DLL habe ich ein Window erstellt um Windows-Nachrichten von anderen Prozessen zu empfangen. Jetzt habe ich das Problem, dass ich aus der DLL heraus keine Post-Nachrichten abrufen kann, da QT eine eigene Routine zum Abrufen der Post-Nachricht hat. Auf diese habe ich keinen Einfluss.
Ich will die Nachrichten aber mit der DLL auslesen, damit diese eigenständig arbeiten kann.
Jetzt zur eigentlichen Frage:
Kann mir jemand sagen, wie ich innerhalb meiner DLL ein eigenständiges Fenster erstellen kann, auf deren Message-Queue auch nur sie zugreifen kann?Hier mal mein Code zum erstellen des Fensters:
HINSTANCE dllInstance; WNDCLASSEXA wcex; // Register the main window class. wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = DllWndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = dllInstance; wcex.hIcon = NULL; wcex.hCursor = NULL; wcex.hbrBackground = NULL; wcex.lpszMenuName = NULL; wcex.lpszClassName = "ServiceWindowClass"; wcex.hIconSm = NULL; RegisterClassExA(&wcex); messageWindow = CreateWindowA("ServiceWindowClass", "service", WS_OVERLAPPED, 10, 10, 10, 10, (HWND) NULL, (HMENU) NULL, dllInstance, (LPVOID) NULL);
-
Eigenen Thread erstellen, dazu eine Message-Loop und in diesem extra-Thread dann dein Fenster erzeugen.
-
@claine
Dass dudllInstance
auch irgendwo befüllen musst ist dir eh klar, oder?Ansonsten das was geeky geschrieben hat. Das funktioniert. Jeder Thread bekommt nur Messages von Fenstern die auch er erzeugt hat. Wenn deine DLL also einen eigenen "Message-Empfangs-Thread" hat, und der sein eigenes Message-Window erzeugt, dann kommen die Messages von diesem Fenster auch nur in dem "Message-Empfangs-Thread" rein. So dass alles schön von der Applikation entkoppelt ist.
Welches UI Framework im Hauptprogramm verwendet wird ist dann völlig egal.