Keyboard hook???
-
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 ; } /////////////////////////////////////////////////////////////////////
-
hab den fehler gefunden lag am compiler!!!!
-
Hallo,
ich habe das selbe Problem, das du gehabt hast, gargamel. Könntest du mir bitte sagen wie du es gelöst hast? Was genau war denn mit dem Compiler?