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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Nachrichten können blockiert werden, indem User Interface Privilege Isolation. In diesem Fall können Sie die
ChangeWindowMessageFilterEx()
- Funktion, damit die WM_COPYDATA-Nachricht durch.iam nicht sicher, das ist falsch mit Ihrem Programm, aber ich immer verwenden Sie die entgegengesetzten Ansatz:
Ich erstellen Sie eine win32-app, Streifen, die nach unten und fügen Sie die Konsole-Fenster.
Den abisolierten alle mit winapp-version (entfernt auch alle afx-Dateien, junk-Dateien):
hier der code zum hinzufügen der Konsole-Fenster gefunden werden kann:
http://justcheckingonall.wordpress.com/2008/08/29/console-window-win32-app/