Globaler KeyboardHook zur kompletten Tastaturabfrage

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

funktioniert das nicht mit der schweizer tastatur?
wenn nicht, probiere mal das hier:

Code: Alles auswählen

Procedure.l myKeyboardHook(nCode, wParam, *p.KBDLLHOOKSTRUCT)
  Char.s  = Space(1)
  If nCode = #HC_ACTION
    If wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP
      #LLKHF_ALTDOWN = $20
     
      If GetAsyncKeyState_(#VK_ESCAPE)                                                ;Escape pressed
        If MessageRequester("EXIT", "End the KeyboardHook ??",#MB_YESNO) = #IDYES
          UnhookWindowsHookEx_(hook)
          End
        EndIf
      EndIf
     
      If GetAsyncKeyState_(#VK_SHIFT) Or GetKeyState_($14) > 0
       Check.i=ToAsciiEx_(*p\vkCode,MapVirtualKey_(*p\vkCode,0),@array.b, @Char.s,0,GetKeyboardLayout_(0));
      Else
       Check.i=ToAsciiEx_(*p\vkCode,MapVirtualKey_(*p\vkCode,0),array(), @Char.s,0,GetKeyboardLayout_(0));
      EndIf
       
      If Check.i  
       Debug Char.s
      EndIf
      
    EndIf
  EndIf
  ProcedureReturn CallNextHookEx_(hook, nCode, wParam, *p)
EndProcedure
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

Poste nochmal ganz.
Ich nehme an, dass der VKK angepasst wird mit dem Windowstastaturlayout. Sonst müsste ein Windowsprogramm, dass auf Tastendruck reagiert, ja etliche Layouts mitbringen...
Benutzeravatar
orderinchaos
Beiträge: 49
Registriert: 20.06.2008 16:19

Beitrag von orderinchaos »

Tut mir leid, ihr habt recht !! Funktioniert doch mit jedem Layout, war mein Fehler !!

Diese Lösung ist sogar wirklich echt elegant, gefällt mir gut !!

Aber noch ne Frage: Wie kann ich denn die Sonderzeichen noch mit einbauen? (Fragezeichen, Ausrufezeichen, etc)

Grüsse
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

orderinchaos hat geschrieben:Aber noch ne Frage: Wie kann ich denn die Sonderzeichen noch mit einbauen? (Fragezeichen, Ausrufezeichen, etc)
öhm.. drück doch mal die Sonderzeichen, du wirst sehen das sie funktionieren ^^
Benutzeravatar
orderinchaos
Beiträge: 49
Registriert: 20.06.2008 16:19

Beitrag von orderinchaos »

ja teilweise funktionieren sie... zum beispiel das "ä" oder "ö" oder der punkt (".") aber wenn ich z.b. SHIFT + 5 drücke, dann kommt eine 5, statt dem "%"....

ist das bei euch nicht auch so? liegt das vielleicht am tastaturlayout, oder woran kann es sonst liegen?
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

Hä. Mit der letzten von Deluxe kommen bei mir nur die Großbuchstaben und !"§$% etc... egal ob ich Shift drücke oder nicht...
Benutzeravatar
orderinchaos
Beiträge: 49
Registriert: 20.06.2008 16:19

Beitrag von orderinchaos »

Hä. Mit der letzten von Deluxe kommen bei mir nur die Großbuchstaben und !"§$% etc... egal ob ich Shift drücke oder nicht...
seltsam, bei mir funktionierts, bis auf meinen letzten Beitrag....

glaub ich zwar nicht, aber vielleicht hast du CAPSLOCK drin?

das ist mein kompletter funktionierender code (bis auf die Sonderzeichen in verbindung mit SHIFT...) :

Code: Alles auswählen

Global hWindow,hook

Global Dim Array.b(256)

Structure KBDLLHOOKSTRUCT
  vkCode.l
  scanCode.l
  flags.l
  time.l
  dwExtraInfo.l
EndStructure

Procedure.l myKeyboardHook(nCode, wParam, *p.KBDLLHOOKSTRUCT)
  Char.s  = Space(1)
  If nCode = #HC_ACTION
    If wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP
      #LLKHF_ALTDOWN = $20
     
      If GetAsyncKeyState_(#VK_ESCAPE)                                                ;Escape pressed
        If MessageRequester("EXIT", "End the KeyboardHook ??",#MB_YESNO) = #IDYES
          UnhookWindowsHookEx_(hook)
          End
        EndIf
      EndIf
     
      If GetAsyncKeyState_(#VK_SHIFT) Or GetKeyState_($14) > 0
       Check.i=ToAsciiEx_(*p\vkCode,MapVirtualKey_(*p\vkCode,0),@array.b, @Char.s,0,GetKeyboardLayout_(0));
      Else
       Check.i=ToAsciiEx_(*p\vkCode,MapVirtualKey_(*p\vkCode,0),array(), @Char.s,0,GetKeyboardLayout_(0));
      EndIf
       
      If Check.i 
       Debug Char.s
      EndIf
     
    EndIf
  EndIf
  ProcedureReturn CallNextHookEx_(hook, nCode, wParam, *p)
EndProcedure

#WH_KEYBOARD_LL = 13
hook = SetWindowsHookEx_(#WH_KEYBOARD_LL,@myKeyboardHook(),GetModuleHandle_(0),0)
If hook = 0: End: EndIf


hWindow     = OpenWindow(1,0,0,0,0,"k8D h00K",#PB_Window_Invisible)

Repeat
  WaitWindowEvent()
  Delay(10)
ForEver
vielleichts geht's mit diesem!!
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

Der Code funzt bis auf _ > | ´ ` ° und die Drittbelegungen (€ @ µ etc...)
Naja. Tab und Backspace müssten noch irgendwie angepasst werden. Und F-Tasten fehlen auch noch. Und die Win-Taste.
Benutzeravatar
orderinchaos
Beiträge: 49
Registriert: 20.06.2008 16:19

Beitrag von orderinchaos »

gut, und was ist mit dem "!"? funzt das bei dir? bei mir nämlich immer noch nicht....

wie könnte man die tasten die noch fehlen und du aufgezählt hasst einbauen? hast du eine idee? :freak:
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

Ja. ! " § funtz alles bei mir. Naja F-Tasten sind glaub ich schnell erledigt. Man müsste nur irgendwie die Strg-, Alt- und Alt Gr Taste abfragen...
Antworten