Code: Alles auswählen
mainwin.l       =1
GAKS.l          =0
#lib_user       =1
key.c           =0
shiftstatus.l   =0
If OpenWindow(mainwin, 0, 0, 320, 200, "Keyboard-Test",#PB_Window_MinimizeGadget)And CreateGadgetList(WindowID(mainwin))
  ListViewGadget(mainwin, 10, 10, 300,180)
  AddGadgetItem(mainwin, 0, "") 
  AddGadgetItem(mainwin, 1, "") 
  AddGadgetItem(mainwin, 2, "") 
  ;Adresse von "GetAsyncKeyState" innerhalb der "user32" ermitteln und GAKS zuweisen
  If OpenLibrary(#lib_user, "user32")
    GAKS = GetFunction(#lib_user, "GetAsyncKeyState")
  EndIf
  Repeat
    Event=WindowEvent()
    If Event=256 ;Keypress detected
      key=EventwParam() ;Value of the key in ascii
    EndIf
    If key=$1B ;if ESC key is pressed, terminate application
      End
    Else
      SetGadgetItemText(mainwin, 0,RSet(Bin(key),32,"0")+"  $"+Hex(key))
    EndIf
    ;SHIFT-Taste überprüfen + anzeigen
    If GAKS
      shiftstatus=CallFunctionFast(GAKS, 16):;16=SHIFT-Taste
      SetGadgetItemText(mainwin, 1,RSet(Bin(shiftstatus),32,"0")+"  $"+Hex(shiftstatus))
    EndIf
    
    ;Aus key und shiftstatus basteln wir nun die echten Zeichen zusammen:
    If (key>=$41) And (key<=$5A) :;key>="A" and key<="Z"
      If (shiftstatus&$8000)=0 : ;SHIFT ist nicht gedrückt
        key=key+$20
      EndIf
      SetGadgetItemText(mainwin, 2,Chr(key)+"  $"+Hex(key))
    EndIf
    
    If (key>=$30) And (key<=$39) :;key>="0" and key<="9"
      If (shiftstatus&$8000)=0 : ;SHIFT ist nicht gedrückt
        SetGadgetItemText(mainwin, 2,Chr(key)+"  $"+Hex(key))
      Else
        ;Hier müssten nun die Zeichen !"§$%&/()= behandelt werden
      EndIf
    EndIf
    
    If (key=$BC) : ;Scancode des Kommas
      If (shiftstatus&$8000)=0 : ;SHIFT ist nicht gedrückt
        key=Asc(",")
        SetGadgetItemText(mainwin, 2,Chr(key)+"  $"+Hex(key))
      Else
        ;Hier müsste nun das Zeichen ; (Semikolon) behandelt werden
      EndIf
    EndIf
    
    If key=$20 : ;key>=" " Blank
      SetGadgetItemText(mainwin, 2,Chr(key)+"  $"+Hex(key))
    EndIf
    
    Delay(10) ;don't take all CPU power
  ForEver
EndIf
Diese blöden "if key=xx" nerven mich. Gibt's kein
Code: Alles auswählen
select
   case $41
   case $42
      ;Code für $41 UND $42
endselect
EDIT: Doch, gibt's. Streicht diese Frage
