SendMessage in KeyboardHook-Proc
-
hi,
ich habe einen KeyboardHook geschrieben und möchte nun wenn eine Taste gedrückt wird eine Nachricht per 'SendMessage()' an ein anderes Programm schicken. Das funzt allerdings nur, wenn mein Fenster (also das mit dem Hook) aktiv ist. Wenn es nich den Fokus hat, dann kommt zwar die (zu Testzwecken eingebaute) MessageBox, aber die Nachricht wird nicht versandt.
Woran liegt das?
-
der hook muss in einer DLL sein.
-
Woher kennst du denn das Fenster-Handle, an das du die Message schicken willst?
-
Mal 'ne dumme Frage:
Kannst Du mal zeigen, wie Du den Hook machst? (bring ich net, waere nett
)
-
guck' mal in die FAQ's
-
Original erstellt von WebFritzi:
Woher kennst du denn das Fenster-Handle, an das du die Message schicken willst?das Fenster-Handle ist global und in der WinMain wird mit 'FindWindow()' das Fenster gesucht und an das Handle zugewiesen.
-
Original erstellt von Dommel:
das Fenster-Handle ist global und in der WinMain wird mit 'FindWindow()' das Fenster gesucht und an das Handle zugewiesen.Ich denke, mit "global" meinst du "global in der DLL" und mit "WinMain" eigentlich "DllEntryPoint", also die DLL-Main. Der Fehler ist mir bekannt! Wenn sich die DLL in einen Prozess reinhängt, dann erstellt sie für jede globale Variable eine neue Instanz. Das macht sie bei JEDEM Prozess. Das heißt, das Handle ist in anderen Prozessen nicht bekannt. Du kannst das Problem auf zwei Arten lösen. Entweder, du benutzt FindWindow() in der DLL, oder du erstellst Shared Memory. Schau mal in die FAQ (unter MouseHook oder KeyboardHook... weiß jetzt nicht mehr genau). Da gibt es IMHO auch ein HWND mit shared memory.
-
ich hab eigentlich gar keine DLL.
brauch man denn unbedingt eine DLL für einen KeyboardHook???
-
Wenn er Systemweit funktionieren soll ja!
-
ok, dann werd ich das mit der DLL mal ausprobieren.
danke