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
