FAQ Keylogger Hooks
-
Hallöchen,
ich zweifel schon richtig derb an mir.
Habe mir das Bsp aus der FAQ angeschaut, auch so weit schon hinbekommen, dass es keine Fehler gibt. Ging recht fix, hab das mit dll denke ich ganz gut verstanden. Ich füge also die lib zu meinem Projekt hinzu.
Compiliere und es gibt keine Fehler.Meine Form heißt: KeyHookForm
Die Caption meiner Form heißt: TKeyHookFormmeine lib keydll.lib und dll keydll.dll
und nun bitte ich euch, habt mitleid mit mir, wo liegt mein Fehler?
wieso loggt dieser keinen Anschlag?BCB 6
Falls ich wichtige Infos nicht genannt habe, bitte melden.
Wieso geht das bei mir nicht? Bekomme ich keinen Handel auf meine Form? Oder wie sehe ich das?OS: WinXP Home
Tschüß
-
Tjaja, ich habe schon immer über diesen schlechten FAQ-Thread gemeckert, aber keiner hat mich erhört. Somit gibt es damit immer wieder Probleme. Die DLL sollte so aussehen:
//--------------------------------------------------------------------------- #include <windows.h> #pragma hdrstop //--------------------------------------------------------------------------- #define WM_KEYHOOK WM_USER+100 HHOOK ghhookKB; HINSTANCE ghInst; #pragma argsused //--------------------------------------------------------------------------- int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { ghInst = hinst; return (1); } //--------------------------------------------------------------------------- extern "C" __declspec(dllexport) __stdcall void SetHook(void); extern "C" __declspec(dllexport) __stdcall void RemoveHook(void); extern "C" __declspec(dllexport) __stdcall LRESULT CheckKey(int, WPARAM,LPARAM); //--------------------------------------------------------------------------- void __stdcall SetHook(void) { ghhookKB = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)CheckKey, ghInst, 0); } //--------------------------------------------------------------------------- void __stdcall RemoveHook(void) { UnhookWindowsHookEx(ghhookKB); } //--------------------------------------------------------------------------- LRESULT CALLBACK CheckKey(int nCode, WPARAM wParam, LPARAM lParam) { HWND ghAppWnd = FindWindow("TKeyHookForm", NULL); if((nCode < 0) || nCode == HC_NOREMOVE) return CallNextHookEx(ghhookKB, nCode, wParam, lParam); // Skip if it's a repeat if(lParam & 0x40000000) return CallNextHookEx(ghhookKB, nCode, wParam, lParam); // Send key information to the main window SendMessage(ghAppWnd, WM_KEYHOOK, 0, lParam); return CallNextHookEx(ghhookKB, nCode, wParam, lParam); } //---------------------------------------------------------------------------
Erstelle die DLL ohne VCL. Die brauchst du bei diesem einfachen Beispiel eh nicht.
Das viele mit diesem FAQ-Beitrag nicht zurechtkommen liegt an dieser Zeile:
lpfnHookProc = GetProcAddress(GetModuleHandle("keydll.dll"),"CheckKey");
Wozu sollte man innerhalb eines Moduls einen Pointer auf eine Funktion innerhalb des Moduls bekommen wollen?!
-
Danke dir, nun geht das
jedoch weiß ich nun nicht ganz ob das an deinem verbesserten Code lag, oder zusätzlich noch an meiner Änderung.
Durch die neue dll, kam keine Änderung. Nun hatte ich aber das Gefühl, dass dieser Hook gar nicht gesetzt wurde.
Deswegen gab ich ihn auf einen Buttonklick. Nun gehts. FormCreate ist zu früh angesetzt, FormShow ist auch OK.Evt. müsste man die FAQ ändern. Also bei mir lag das daran.
Ach ja, geheiligte werde der Name WebFritzi
-
Ich glaub, ich mag dich...