Auf Anregung von TomS noch eine kleine Beschreibung, wozu der Code hier gut ist:
Mit GetKeyNameText_() kann man, wie der Name des Befehls schon vermuten lässt, den Namen zu einem Scancode zugehörigen Taste herausfinden. Damit kann man sich selbst definierte Arrays, mit denen man jeder #VKey_***-Konstante einen Namensstring zuordnet sparen, und erhält ausserdem gleich den Namen der Taste wie er im grade eingestellten Tastaturlayout definiert ist (z.B. auf Deutsch, Französisch, Englisch, etc).
Bei diesem Code habe ich einfach eine For-Next-Schleife verwendet, um alle denkbaren Codes zwischen von 0 bis 255 abzufragen.
Ein solcher Code könnte z.B. verwendet werden, wenn man in einem Konfigurationsdialog eine Dropdown-Liste mit allen verfügbaren Tasten anbieten möchte, und die vom Benutzer gewählte Taste dann mit ihrem Scancode in der Einstellungsdatei speichern möchte.
Bei allen Codes, die ich bis jetzt gefunden habe, wurden nie alle verfügbaren Tasten erkannt. Gestern habe ich dann allerdings durch Zufall rausgefunden, dass manche Tasten nur mit aktiviertem "Extended-Key"-Bit erkannt werden, während andere nur erkannt werden, wenn dieses Bit auf 0 gesetzt ist.
Weitere Details zu GetKeyNameText_() gibts hier:
http://msdn2.microsoft.com/en-us/library/ms646300.aspx
[/edit]
Code: Alles auswählen
NewList keynames.s()
For k=0 To 255 ;check every possible VKey code
name.s=Space(255)
If GetKeyNameText_(k<<16|%1<<24,@name,255) ;%1<<24 means we set the "extended key" bit
AddElement(keynames()) ;%1<<25 would set the "don't care" bit, meaning
keynames()=name ;we don't want #VK_RWIN, #VK_RSHIFT, etc, but
Else ;only #VK_LWIN, #VK_LSHIFT, etc for both sides
If GetKeyNameText_(k<<16,@name,255) ;some keycodes, for example the F1-F12 keys get
AddElement(keynames()) ;only recognized with the extended key bit disabled
keynames()=name
EndIf
EndIf
Next
ForEach keynames()
Debug keynames()
Next