Keyboard hook???
-
gargamel schrieb:
du meinsch schon das ich irgentein window des ich mit findwindow hooken soll
Ich antworte auf nichts, was ich nicht verstehe!!! Wenn du willst, dass man dir hilft, dann drück dich gefälligst ordentlich aus, so dass man dich versteht.

-
das mit findwinow() gefundene handle das ich an setuphook übergeben soll funktioniert leider nicht
besser

-
WebFritzi schrieb:
Wenn du die Nachricht an das Fenster aus der DLL heraus sendest, dann verwende als Handle mal eines, welches du mit FindWindow() bekommst und sag an, ob's dann funzt.
Das hatte ich geschrieben! Dann mach das auch so!
-
eben des geht ja auch nicht
-
gargamel schrieb:
eben des geht ja auch nicht
Doch! Du bist bloß so blöd, dass du nicht verstehst, was ich geschrieben habe. Sorry, aber das musste mal raus. Du sollst in der HookProc mit FindWindow nach dem Fenster suchen, an welches die Nachricht geschickt werden soll. Und dann sollst du das in SendMessage einsetzen. Man, man, man...
-
ebbbbeeennnnnnnnn deeeess kkkkkllllllllaapppppppppppttttt niiiiiiiccccccchhhhhtttt
-
Zeig deine HookProc!!!
-
aber ich hab rausgefunden das es in die funktion gar net kommt
LRESULT CALLBACK KeyboardHookProc (int nCode, WPARAM wParam, LPARAM lParam){ MessageBox(NULL,"hier",0,0);//kommt gar nicht hWindow = FindWindow(NULL,"Windows App") ; if (nCode == HC_ACTION){ if ((lParam & 1073741824) != 1073741824){ gedrückt war SendMessage ((HWND) hWindow, (WM_USER + 2), (WPARAM) wParam, (LPARAM) lParam) ; gedrückten } } return CallNextHookEx (hhkHook, nCode, wParam, lParam) ; }is der fehler vielleicht hier drin???
EXPORT BOOL CALLBACK SetupHook (HWND hParent){ hWindow = hParent ; MessageBox(NULL,"hier",0,0);//hier hin kommts hhkHook = SetWindowsHookEx (WH_KEYBOARD, KeyboardHookProc, hDllInstance,0) ; return TRUE ; }
-
Was liefert denn SetWindowsHookEx zurück? Falls NULL: Was sagt GetLastError()?
-
es kommt
Cannot set nonlocal hook without a module handle 1428
-
und wie kannh ich des module handle bekommen???
-
Hat zu diesem Zeitpunkt hDllInstance einen gültigen Wert? Hast du exakt den Code aus den FAQ übernommen?
-
ich hab exakt den code vom faq
und hDllInstance hat da 0

-
Kommt er denn in den DLL_PROCESS_ATTACH Zweig?
-
ne kommt nie dahin kommt auch nich in int APIENTRY DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
-
Aber du hast beim Erstellen des Projektes schon ausgewählt, dass du eine "Win32 Dynamic-Link Library" erstellen willst, oder?
-
ja klar wie konnt ichs dann wissen das es da nich hin kommt
-
Was meinst du
Auf jeden Fall scheinst du irgend etwas falsch zu machen 
-
ja aber was
-
ich gib mal meine ganze dll
// hookdll.c // Der Keyboardhook wird beim aufruf die Funktion SetupHook (HWND) // vom Hauptprogramm aus gesetzt. Dabei wird das Fensterhandle des // aufrufendes Programms an die Funktion übergeben. Als Ergebnis // sendet die hookdll.dll über die Funktion KeyboardHookProc // jedes mal wenn eine Taste betätigt wird eine Nachricht // vom Typ (WM_USER + 2) an das Hauptprogramm. Dabaei steht der // Tastencode der gedrückten Taste in dem Paramter "wParam". // Wenn der Hook nicht mehr benötigt wird, löscht man ihn über die // Funkion UninstallHook () #include <windows.h> #include <stdio.h> #include "hookdll.h" /* -> Siehe Oben */ // Weise den Compiler an, die Variable hWindow in einem // separaten Abschnitt namens Shared unterzubringen // Darüber hinaus ist dann auch noch dem Linker mitzuteilen, // dass die Daten in diesem Abschnitt von allen Instanzen // dieser Anwendung gemeinsam verwendet werden sollen. // Ganz wichtig dabei ist, dass die Variablen initialisiert // sein müssen. #pragma data_seg ("Shared") HWND hWindow = 0 ; #pragma data_seg () // Weise den Compilern, den Abschnitt Shared als lesbar, // beschreibbar und zur gemeinsamen Verwendung zu deklarieren - "RSW". #pragma comment (linker, "/section:Shared,RWS") LRESULT CALLBACK KeyboardHookProc (int, WPARAM, LPARAM) ; // Der Prototyp der Funktion KeyboardHookProc HHOOK hhkHook ; HINSTANCE hDllInstance ; // Definition globaler Variablen /************************************************************************/ /* DllMain: wird automatisch aufgerufen, wenn die DLL mit LoadLibrary() */ /* geladen, oder mit FreeLibrary wieder freigegeben wird. */ /* Eingabe Parameter: Systemspezifische Daten */ /* Return-Wert: TRUE */ /************************************************************************/ int APIENTRY DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) { MessageBox(NULL,"in main",0,0); switch (fdwReason){ case DLL_PROCESS_ATTACH : // Die DLL wird in den Adressraum des aktuellen Prozesses // eingeblendet. hDllInstance = hInstance ; MessageBox(NULL,,"DLL_PROCESS_ATTACH???",0,0); // Initialisierung der globalen Variable break ; } return TRUE ; } /***********************************************************/ /* SetupHook: EXPORT Funktion, setzt den Keyboardhook */ /* Eingabe Parameter: HWND des aufrufenden Fensters */ /* Return-Wert: TRUE */ /***********************************************************/ EXPORT BOOL CALLBACK SetupHook (HWND hParent){ hWindow = hParent ; char buf[100]; sprintf(buf," hDllInstance=%d",hDllInstance); MessageBox(NULL,buf,0,0); // SendMessage ((HWND) hWindow, (WM_USER + 2), (WPARAM) "test", (LPARAM) NULL) ; // Initialisierung der globalen Variable mit dem Eingabe Parameter hhkHook = SetWindowsHookEx (WH_KEYBOARD, KeyboardHookProc, hDllInstance,0); if(hhkHook==NULL) { int error=GetLastError(); sprintf(buf," getlasterror=%d",error) ; MessageBox(NULL,buf,0,0); return 0; } // Keyboardhook setzen und das Ergebnis in der globalen Variable // hhkHook speichern. return TRUE ; } /*******************************************************************/ /* KeyboardHookProc: wird jedes mal aufgerufen, wenn eine Taste */ /* betätigt wird */ /* Eingabe Parameter: Systemspezifische Daten */ /* Return-Wert: s. u. */ /*******************************************************************/ LRESULT CALLBACK KeyboardHookProc (int nCode, WPARAM wParam, LPARAM lParam){ // hWindow = FindWindow(NULL,"Windows App") ; MessageBox(NULL,"hier",0,0); if (nCode == HC_ACTION){ // Verhindern das eine Nachricht mehrmals verarbeitet wird. if ((lParam & 1073741824) != 1073741824){ // Überprüfen ab vor dem Aufruf dieser Funktion die Taste bereits gedrückt war SendMessage ((HWND) hWindow, (WM_USER + 2), (WPARAM) wParam, (LPARAM) lParam) ; // Senden der Nachricht (WM_USER + 2) und den Tastencode der gedrückten // Taste (gespeichert in "wParam") an das in der globalen Variable // hWindow gespeicherte Fensterhandle. } } return CallNextHookEx (hhkHook, nCode, wParam, lParam) ; // Die Nachrichten an den nächsten Hook weiterreichen. } /*********************************************************************/ /* UninstalHook: EXPORT Funktion, löscht den über die Funktion */ /* SetupHook gesetzten Hook */ /* Eingabe Parameter: keine */ /* Return-Wert: TRUE */ /*********************************************************************/ EXPORT BOOL CALLBACK UninstallHook (void){ UnhookWindowsHookEx (hhkHook) ; // den in der globalen Variable hhkHook gespeicherten Hook löschen. return TRUE ; } /////////////////////////////////////////////////////////////////////