GetKeyNameText_()

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46
Wohnort: Luxemburg
Kontaktdaten:

GetKeyNameText_()

Beitrag von hardfalcon »

[edit]
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
Zuletzt geändert von hardfalcon am 27.11.2007 11:07, insgesamt 1-mal geändert.
„Warum siehst du den Splitter im Auge deines Bruders, aber den dicken fetten schwarzen Zensurbalken vor deinem Auge bemerkst du nicht?“
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

Dokumentation?
Wenn auch Anfänger wüssten, was der Code eigentlich macht, könnten sie auch davon profitieren^^
Benutzeravatar
Ligatur
Beiträge: 196
Registriert: 09.07.2006 00:41

Beitrag von Ligatur »

Um wirklich alle Möglichkeiten abzufragen musst du aber die Schleife zweimal laufen lassen, einmal mit und einmal ohne extended key bit. Einige Scancodes haben je nachdem ob das Flag gesetzt ist oder nicht verschiedene Bedeutungen (Bei mir ist z.B. 70 mit Flag UNTERBR und ohne ROLLEN-FESTSTELL

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()= Str(k) + " Ex - " + name                   ;we don't want #VK_RWIN, #VK_RSHIFT, etc, but 
  EndIf
Next                                    ;only #VK_LWIN, #VK_LSHIFT, etc for both sides 
For k=0 To 255 ;check every possible VKey code 
  name.s=Space(255) 
  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()= Str(k) + " - " + name 
  EndIf 
Next 

ForEach keynames() 
  Debug keynames() 
Next
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

danke euch.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46
Wohnort: Luxemburg
Kontaktdaten:

Beitrag von hardfalcon »

Danke für den Hinweis, Ligatur! :D
„Warum siehst du den Splitter im Auge deines Bruders, aber den dicken fetten schwarzen Zensurbalken vor deinem Auge bemerkst du nicht?“
Antworten