desmoloch Geschrieben 5. März 2004 Geschrieben 5. März 2004 hi bin grad dabei mich einfach mit dem "Window Hooking" zu beschäftigen und bin momentan an einem Punkt an dem ich nicht mehr weiterkomme. Ich versuche WH_CALLWNDPROC zu benutzen aber dabei schmiert mir dann immer mein komplettes windows ab, obwohl ich mich nur "dazwischenklemme" code: VB6 TestHandle = SetWindowsHookEx( _ WH_CALLWNDPROC, AddressOf testcallback, _ App.hInstance, 0&) Public Function testcallback(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long testcallback = CallNextHookEx(TestHandle, nCode, wParam, lParam) end function [/php] kann mir jemand helfen warum dann immer meine explorer.exe abschmiert? danke Zitieren
Diablo999 Geschrieben 5. März 2004 Geschrieben 5. März 2004 Du übergibst als ThreadID die 0, das bedeutet das der Hook auf alle Threads im System angewendet werden soll -> Das geht aber nur wenn die Funktion auf die der 2.Parameter zeigt innerhalb einer DLL liegt, deine Funktion liegt aber in deinem Programm und kann somit nicht in den fremden Speicherbereich geladen werden... Wenn du die Meldungen für deinen eigenen Prozess abfangen willst übergib die aktuelle ThreadID :floet: Gruß Diablo999 Zitieren
Diablo999 Geschrieben 5. März 2004 Geschrieben 5. März 2004 Und wenn du die Meldungen des gesamten Systems abfangen willst kommst du nicht um eine DLL herum :D Zitieren
desmoloch Geschrieben 6. März 2004 Autor Geschrieben 6. März 2004 hmm aso ne dll... schade keyboard und mousehook laufen systemweit naja mal schauen ob mir das auch für mein programm reicht! danke! du scheinst dich ja gut damit auszukennen, ich hab auch noch ein paar andere Hooks ausprobiert (SYSMSGFILTER zum Beispiel) und die haben auch alle net funktioniert. muss das auch über ne dll laufen? Zitieren
Diablo999 Geschrieben 7. März 2004 Geschrieben 7. März 2004 Wenn du den Hook nur für deinen eigenen Thread startest, also mit GetCurrentThreadID die ThreadID ermitteltst und diese an SetWindowsHookEx übergibst müssten alle Hooks laufen aber halt nur für deinen Thread... Gibt aber wie du sagst ein paar Hooks die nur global laufen und die gehen dann halt nicht z.B. WH_JOURNALPLAYBACK Bei Systemweiten Hooks ist zwingend eine DLL notwendig, geht aber nicht mit VB, geht nicht mit ner ActiveX DLL. Gruß Diablo999 Zitieren
desmoloch Geschrieben 7. März 2004 Autor Geschrieben 7. März 2004 hmm aber mein Keyboard und Mousehook laufen ohne zusätzliche dll systemweit! ich benutze dafür WH_KEYBOARD und WH_MOUSE damit fange ich doch auch systemweit alles ab?! worum es mir eigentlich geht ist folgendes: ich habe eine exe datei laufen und ich möchte verhindern das diese durch den Taskmanager beendet werden kann. Hab mich dafür dann ein wenig mit Hooks vertraut gemacht und mir kam die Idee das ich ja einfach den "kill" befehl vom Task Manager abfangen und nicht weitersenden könnte. Dafür könnte ich dich die per SendMessage gesendeten Nachrichten an WH_CALLWNDPROC abfangen oder? oder wird sowas noch anders übergeben? Zitieren
desmoloch Geschrieben 8. März 2004 Autor Geschrieben 8. März 2004 ok noch ein problem per KBDLLHOOKSTRUCT wird die Tastatureingabe an mein Programm irgendwie immer 2 mal übergeben... also wenn ich A drücke bekommt das Prog AA. Ich weiss leider nicht wie ich das umgehen soll... klar ich kann blockieren das 2 mal hintereinander das gleiche kommt, das aber schlecht kann auch aufs KEYUP warten, nur dann kann man die tasten auch nicht mehr gedrückt halten was kann ich tun? warum kommen die tasten immer 2 mal an? Wenn ich einen Breakpoint setze dann kommt das nur 1 mal... das heisst es kommt irgendwie ganz schnell nochmal an oder so... Zitieren
maxim_42 Geschrieben 8. März 2004 Geschrieben 8. März 2004 Möglicherweise mangelt es mir an Fantasie... doch ich kann mir keinen Fall vorstellen, in dem es sinnvoll ist, die Möglichkeit der Beendigung einer Anwendung durch den Taskmanager auszuschliessen. Zitieren
desmoloch Geschrieben 8. März 2004 Autor Geschrieben 8. März 2004 ja dir mangelt es vielleicht an phantasie *g stell dir einfach mal eine Firma vor wo jeder Mitarbeiter Admin rechte hat. Nun gibt es selbstgeschriebene Programme die man nicht beenden können soll. klingt doch so als bräuchte man das nun? Zitieren
maxim_42 Geschrieben 8. März 2004 Geschrieben 8. März 2004 Dann nehm ich mal an, das Programm wird bei Systemstart gestartet und soll dann laufen, solange ein Benutzer angemeldet ist. Vieleicht wäre es dann günstiger dein Programm als Dienst zu konzipieren. Zitieren
desmoloch Geschrieben 8. März 2004 Autor Geschrieben 8. März 2004 hmm dienst klingt gut aber ich hab von dienste mit VB keine ahnung! und als dienst wäre die .exe vom Dienst ja trotzdem noch zu sehen und auch killbar! nochmal zu meinem Programm: um mich mich jetzt mit Hooks ein wenig besser vertraut zu machen, hab ich mal systemweit die tastatur abgefangen. Leider wird der .vkcode von KBDLLHOOKSTRUCT nicht immer korrekt übergeben?! Shift sollte eigentlich 16 oder so sein, mein hook fängt aber 161 ab... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.