[solved] Tastatur Hook
-
Hallo,
ich versuche mich gerade das erste Mal an Windows Hooks und komme nicht weiter...
In der DLL befindet sich bisher nur eine Funktion:
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) { ofstream myfile; myfile.open("log.txt"); myfile << nCode << " " << wParam << " " << lParam << endl; myfile.close(); return CallNextHookEx(NULL, nCode, wParam, lParam); }
und dann ruf ich die DLL über ein anderes Programm auf:
HINSTANCE hinstDLL = LoadLibrary(TEXT("Hook.dll")); HOOKPROC hookProc = (HOOKPROC)GetProcAddress(hinstDLL, "HookProc"); HHOOK MyHook = SetWindowsHookEx( WH_KEYBOARD, hookProc, hinstDLL, 0); DWORD HookError = GetLastError();
bekomme leider immer Fehler 1427 - Unzulässige Hookprozedur
muss ich den Hook innerhalb der DLL installieren und entfernen oder geht das auch so aus meinem anderen Programm? Muss ich irgendwelche Daten sharen? Muss ich die Funktion in der DLL vielleicht exportieren oder inportieren?
-
In der FAQ ist ein DLL-Beispiel für ein Keyboard-hook.
-
Das Beispiel hilft mir leider nicht weiter. Kann mir jemand sagen was bei meinem Code falsch ist?
-
Ich hab jetzt gerade herausgefunden das ich bereits hinter
hookProc = (HOOKPROC)GetProcAddress(hinstDLL, "HookProc");
einen Fehler habe und zwar 127 - The specified procedure could not be found.
Wodran kann es liegen das die Funktion nicht gefunden wird? Die DLL-File wird gefunden!
-
Du hast wahrscheinlich die Funktion mit falschem Symbol (Namen) exportiert. Guck mal in die DLL rein und such nach "HookProc", wahrscheinlich findest du sowas wie "_HookProc@123" oder so. Falls ja, mach dich schlau, wie man korrekt Funktionen exportiert.
-
Ich hab meiner DLL jetzt
#ifndef INDLL_H #define INDLL_H #ifdef EXPORTING_DLL extern __declspec(dllexport) LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam); #else extern __declspec(dllimport) LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam); #endif #endif
hinzugefügt, geht aber leider immer noch nicht
Wenn ich in die DLL reingucke sehe ich die Funktion mit long HookProc(int, unsigned, long) Ordinal^ 1 und dem Entry Point 0x0001100A sieht also eigentlich gut aus...
-
Ich hab es endlich nach ca. 2 Wochen hinbekommen
Kann es sein das GetProccAdress nicht mit __declspec(dllimport) funktioniert? Ich hab es jetzt mit einer .def-File probiert und jetzt funktioniert es