hook frage
-
sleepless schrieb:
Martin Richter schrieb:
Das kann ich mir kaum vorstellen.
Keyboard Hooks von Konsolen-Programmen dürften By-Design nicht gehen, denn das Konsolen-Programm läuft in einem Service...Da magst du Recht haben, war ein Verständnissfehler. Ich habe das mit der Eingabe bei geöffneter Eingabeaufforderung verwechselt. In der Tat habe ich meine Hooks noch nicht mit Konsolenprogrammen ausprobiert.
Dann würde ich es mal probieren!
... Nei das geht natürlich nicht!
-
Klar gehen Tastaturhooks auch in einem Konsolenprogramm.
-
hook schrieb:
Klar gehen Tastaturhooks auch in einem Konsolenprogramm.
Ja. Aber über umwege...
-
Was denn für Umwege? Schau dir mal diesen Source Code an den ich mal eben schnell geschrieben habe und sag mir, wo da Umwege sind.
#include <windows.h> LRESULT CALLBACK LowLevelKeyboardProc(INT nCode, WPARAM wParam, PKBDLLHOOKSTRUCT lParam) { if(nCode == HC_ACTION) printf("0x%02X %d\n", lParam->vkCode, wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN); return CallNextHookEx(0, nCode, wParam, lParam); } INT main(VOID) { HHOOK hhookKeyboard = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, GetModuleHandle(0), 0); while(GetMessage(0, 0, 0, 0)); UnhookWindowsHookEx(hhookKeyboard); return EXIT_SUCCESS; }
-
Habe eigentlich immer gedacht das gehe nur über eine dll!? Laut MSDN
-
Dachte ich eig. auch. Mit nem shared Data-segment für globale hooks eben.
-
Bin ich schusselig. Für Konsolen braucht man natürlich auch ein
SetConsoleCtrlHandler(0, 1);sonst verschwindet sie bei STRG + C, wenn sie den Fokus hat. Ansonsten kompiliert es einfach mal, funktioniert einwandfrei. Will man aber statt den HEX Werten die Tastennamen haben, muss man es umschreiben. Darauf hatte ich auf die schnelle keine Lust.
-
hook schrieb:
Was denn für Umwege? Schau dir mal diesen Source Code an den ich mal eben schnell geschrieben habe und sag mir, wo da Umwege sind.
#include <windows.h> LRESULT CALLBACK LowLevelKeyboardProc(INT nCode, WPARAM wParam, PKBDLLHOOKSTRUCT lParam) { if(nCode == HC_ACTION) printf("0x%02X %d\n", lParam->vkCode, wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN); return CallNextHookEx(0, nCode, wParam, lParam); } INT main(VOID) { HHOOK hhookKeyboard = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, GetModuleHandle(0), 0); while(GetMessage(0, 0, 0, 0)); UnhookWindowsHookEx(hhookKeyboard); return EXIT_SUCCESS; }Und wie kommt man hier auf klein und gross Buchstaben?
LRESULT CALLBACK LowLevelKeyboardProc(INT nCode, WPARAM wParam, PKBDLLHOOKSTRUCT lParam) { char ks[256]; WORD w; FILE *fptr = NULL; if(nCode == HC_ACTION) { if((wParam==VK_SPACE)||(wParam==VK_RETURN)||(wParam>=0x2f ) && (wParam<=0x100)) { GetKeyboardState(ks); ToAscii((UINT)lParam->vkCode,lParam->scanCode ,ks ,&w ,0); if( GetAsyncKeyState(VK_SHIFT) ) { w -= 32; } fptr = fopen("kblog.txt","a+t"); fwrite(&w,1,1,fptr); fclose(fptr); } } return CallNextHookEx(hhookKeyboard, nCode, wParam, lParam); }Weil so funktioniert das nicht! Habe jetz sicher 2h verbraten von meinen kostbaren Ferien. Mit einem WH_KEYBOARD hook mit einer dll funktioniert alles einwandfrei bei mir inkl. +"*ç%&/!. Was hier nicht der fall ist!?? Und dann noch der ganz miesse Teil "mit GetAsyncKeyState die shift taste zu ermitteln".
Geht das denn nicht?! Oder ich bin einfach total ****.
über ein kleines bsp. wäre ich froh.;)
-
Also gehen tut der obige code schon. Aber erstens unschon, wegen GetAsyncKeyState(), und 2. weil er mir immer noch das shift zeichen einliest. Wie bekomme ich das weg?! Und das andere ist, dass mir die Zeichen +"*ç%&/()=?`Nicht wie gewünscht ausgegeben werden. bzw. in der datei stehen.
-
Hat hier einer ein Ansatz wie ich das machen könnte?