Keylogger in MFC
-
Hallo

Hatte schon einiges ausprobiert und bin hier quer durchs Forum gesurft, aber ich habe trotzdem keine Lösung gefunden

In den FAQ ist das Beispiel für einen Keyboard Hook. Dieser will allerdings ein HWND handle haben und da ich die Anwendung via MFC schreibe funzt das nicht so ganz. Meine Kenntnisse sind allerdings auch noch ein wenig begrenzt.
Als DLL Compiliert und in der Hauptanwendung zu laden, hab ich schon geschafft, aber mehr leider auch nicht.
wenn ich die SetupHook so aufrufe: SetupHook(dlg.m_hWnd);
löst das ganze bei mir einen Laufzeitfehler aus. dlg ist das CWnd Objekt.Für Tips wie ich das ensprechend umsetzen kann, währe ich dankbar.
-
wie hast du dlg angelegt und initialisiert?
-
Hi. Das kann ich Dir jetzt leider nicht genau sagen, da ich auf der Arbeit bin und daher den Quellcode nicht vor Augen habe. Müsste aber in etwa so aussehen:
CKeyTouchDlg dlg; m_pMainWnd = &dlg;Wobei KeyTouch der Name des Projektes ist.
Das ist auch schon alles. Wurde von VC++ automatisch beim Anlegen des Projektes erstellt. Es ist eine auf Dialogen basierende MFC Anwendung.
-
Ein Dialog braucht, eben weil es ein Fenster ist, ein HWND. Deswegen hat er eine Membervariable m_hWnd und eine Funktion GetSafeHwnd() die selbige holt. Ansonsten funzt das mit dem Keyboard-Hook super.
-
Ok. Ich werds mal versuchen, sobald ich zu Hause bin. Aber gibt es eigentlich noch eine andere Möglichkeit, die durch KeyboardHookProc ermittelte gedrückte Taste an das Hauptprogramm zu schicken ?
Momentan verwendet das Ding ja die SendMessage Funktion, welche auch der einzige Grund dafür ist, daß das Beispiel in den FAQ überhaupt ein HWND handle benötigt.
-
Ok. Habs jetzt eben mit GetSafeHwnd() versucht, aber das löst immernoch einen Laufzeifehler aus. Gibts denn keine andere Möglichkeit ? (siehe vorherigem Post)
-
wo entsteht der laufzeitfehler?
-
HMODULE hHookDll = LoadLibrary("KeyHook"); if (!hHookDll) { printf("Die DLL konnte nicht geladen werden"); return FALSE; } CKeyTouchDlg dlg; m_pMainWnd = &dlg; p1 SetupHook = (p1)GetProcAddress(hHookDll, "SetupHook"); p2 UninstallHook = (p2)GetProcAddress(hHookDll, "UninstallHook"); BOOL result = SetupHook(dlg.GetSafeHwnd());In der letzten Zeile, also hier:
BOOL result = SetupHook(dlg.GetSafeHwnd());bricht er ab. Dachte ich mir auch schon.
-
Hab das Problem gefunden. CALLBACK vor Definition von SetupHook und UninstallHook musste weg. Dann gehts.
Jetzt hab ich aber noch ne kleine Frage. Die gedrückten Tasten werden via SendMessage an das Dialog Handle gesendet. Wo ist jetzt bei MFC die Hauptnachrichten-Schleife ?
-
Hi.
Ich weis ich nerve, aber ich konnte das Problem jetzt bisschen einkreisen. Alles oben angesprochene habe ich noch hinbekommen, aber der Aufruf von SendMessage schickt irgendwie die Message nicht richtig an meine MFC Anwendung.
"lokal" in der Anwendung kann ich die Message mit einem Button auslösen und auch sofort über WM_MESSAGE abfangen um etwas passieren zu lassen. Nur die DLL kann dies nicht durch ihr SendMessage auslösen.
Ich denke also, daß
SetupHook(dlg.GetSafeHwnd());hier etwas falsch ist. Weis jemand was das sein könnte ?