Seite 1 von 1
Tastennamen von KeyboardPushed-KeyIDs
Verfasst: 15.10.2010 03:31
von STARGÅTE
Habe mal wieder n Anfängerfrage:
Wie komme ich an den Tastennamen der KeyID die bei KeyboardPushed() verwendet wird.
Sachen aus dem CodeArchiv (mit GetKeyNameText_, MapVirtualKey_, usw.) funktionieren nicht zu 100%.
Problem ist das diese APIs vermutlich nur auf die WindowEvents ausgelegt sind, die Konstanten für KeyboardPushed() jedoch ihre "eigenen" Werte haben (vermutlich im OS-Übergreifen zu sein).
Aber wie kann ich nun den Tastennamen ermitteln nachdem jemand eine Taste über KeyboardPushed() gedrückt hat ?
- Muss ich mir eine Art Übersetzer bauen, der die #PB_Key_ zu #VK_ macht ?
- Eine Namensliste alleine reicht leider nicht, da es Tastatur-Sprachen-Übergreifend sein muss!
- Außerdem sollte sehrwohl zwischen Strg(rechts) und Strg(links) unterschieden werden, was ja KeyboardPushed() ja der Fall ist, bei den WindowEvents jedoch nicht.
Wäre über Hilfe echt dankbar.
Re: Tastennamen von KeyboardPushed-KeyIDs
Verfasst: 15.10.2010 04:27
von Batze
STARGÅTE hat geschrieben:- Außerdem sollte sehrwohl zwischen Strg(rechts) und Strg(links) unterschieden werden, was ja KeyboardPushed() ja der Fall ist, bei den WindowEvents jedoch nicht.
Es sollte neben #VK_CONTROL auch noch #VK_RIGHT_CONTROL und #VK_LEFT_CONTROL geben.
Sachen aus dem CodeArchiv (mit GetKeyNameText_, MapVirtualKey_, usw.) funktionieren nicht zu 100%.
Was anderes würde ich jetzt auch nicht kennen, aber zusammen mit einem Übersetzer #PB -> #VK den man sich schreiben müsste dürte es damit zumindest schonmal Länderübergreifend gehen.
Re: Tastennamen von KeyboardPushed-KeyIDs
Verfasst: 15.10.2010 14:39
von STARGÅTE
Batze hat geschrieben:STARGÅTE hat geschrieben:- Außerdem sollte sehrwohl zwischen Strg(rechts) und Strg(links) unterschieden werden, was ja KeyboardPushed() ja der Fall ist, bei den WindowEvents jedoch nicht.
Es sollte neben #VK_CONTROL auch noch #VK_RIGHT_CONTROL und #VK_LEFT_CONTROL geben.
OK, stimmt, sie heißen
#VK_LCONTROL = 162
#VK_RCONTROL = 163
Soweit so gut ... Damit nun GetKeyNameText_ auch eine Unterscheidung kennt, muss ich ja -
Laut Hilfe - das 24. Bit setzen.
Nun kommts jedoch zu einer seltsammen ausgabe:
Code: Alles auswählen
Procedure.s GetKeyName(KeyID, Bit)
Protected Name.s = Space(255)
KeyID = MapVirtualKey_(KeyID,0)
GetKeyNameText_(KeyID<<16|Bit<<24, @Name, 255)
ProcedureReturn Name
EndProcedure
Debug GetKeyName(#VK_RCONTROL,1)
Debug GetKeyName(#VK_LCONTROL,1)
Debug GetKeyName(#VK_RMENU,1)
Debug GetKeyName(#VK_LMENU,1)
Debug GetKeyName(#VK_RSHIFT,1)
Debug GetKeyName(#VK_LSHIFT,1)
Debug "------"
Debug GetKeyName(#VK_RCONTROL,0)
Debug GetKeyName(#VK_LCONTROL,0)
Debug GetKeyName(#VK_RMENU,0)
Debug GetKeyName(#VK_LMENU,0)
Debug GetKeyName(#VK_RSHIFT,0)
Debug GetKeyName(#VK_LSHIFT,0)
STRG-RECHTS
STRG-RECHTS
ALT GR
ALT GR
------
STRG
STRG
ALT
ALT
UMSCHALT RECHTS
UMSCHALT
*Bahnhof*
Re: Tastennamen von KeyboardPushed-KeyIDs
Verfasst: 15.10.2010 20:01
von Batze
Code: Alles auswählen
Procedure.s GetKeyName(KeyID, Bit)
Protected Name.s = Space(255)
KeyID = MapVirtualKey_(KeyID,0)
Debug KeyID
GetKeyNameText_(KeyID<<16|Bit<<24, @Name, 255)
ProcedureReturn Name
EndProcedure
Debug GetKeyName(#VK_RCONTROL,1)
Debug GetKeyName(#VK_LCONTROL,1)
Debug GetKeyName(#VK_RMENU,1)
Debug GetKeyName(#VK_LMENU,1)
Debug GetKeyName(#VK_RSHIFT,1)
Debug GetKeyName(#VK_LSHIFT,1)
Debug "------"
Debug GetKeyName(#VK_RCONTROL,0)
Debug GetKeyName(#VK_LCONTROL,0)
Debug GetKeyName(#VK_RMENU,0)
Debug GetKeyName(#VK_LMENU,0)
Debug GetKeyName(#VK_RSHIFT,0)
Debug GetKeyName(#VK_LSHIFT,0)
29
STRG-RECHTS
29
STRG-RECHTS
56
ALT GR
56
ALT GR
54
42
------
29
STRG
29
STRG
56
ALT
56
ALT
54
UMSCHALT RECHTS
42
UMSCHALT
Fazit: MapVirtualKey_() ist nicht so das gelbe vom Ei. Du musst für diese Tasten eine Extrabehandlung einfügen. Sind ja nur ein par, aber nervig ist das trotzdem um dann hinterher ein par hoffentlich passende Namen zu bekommen. Ich brauchte zum Glück kein Multilanguage aber in die Bedrängnis werde ich vielleicht auch noch kommen ... wahrscheinlich werde ich die Übersetzer zwingen alle Tasten zu übersetzen.
Re: Tastennamen von KeyboardPushed-KeyIDs
Verfasst: 16.10.2010 00:38
von STARGÅTE
So, habe mir nun ein Include gebaut, mit dem ich den Tasten-Namen der KeyIDs der Keyboard-Lib bekomme:
- Getestet mit Deutsch und Englisch, (auf Deuter Tastatur)
- Alle Tasten verfügbar, auch die, die in PB keine Konstante haben (Anwendung, Windows,
Wäre nett wenn ihr es auf Bugs testet, und vorallem auf einer nicht Deutschen Tastatur (hab hier keine ...)
Code: Alles auswählen
; Wird nur Intern aufgerufen, um das Array anzulegen!
Procedure.s GetKeyboardKeyName(KeyID, Bit24=0)
Protected Name.s = Space(255)
GetKeyNameText_(KeyID<<16|Bit24<<24, @Name, 255)
ProcedureReturn Name
EndProcedure
; Dies ist das Namens-Array der Tastennamen
Global Dim KeyboardKeyName.s(255)
KeyboardKeyName(#PB_Key_Escape) = GetKeyboardKeyName(1)
KeyboardKeyName(#PB_Key_F1) = GetKeyboardKeyName(59)
KeyboardKeyName(#PB_Key_F2) = GetKeyboardKeyName(60)
KeyboardKeyName(#PB_Key_F3) = GetKeyboardKeyName(61)
KeyboardKeyName(#PB_Key_F4) = GetKeyboardKeyName(62)
KeyboardKeyName(#PB_Key_F5) = GetKeyboardKeyName(63)
KeyboardKeyName(#PB_Key_F6) = GetKeyboardKeyName(64)
KeyboardKeyName(#PB_Key_F7) = GetKeyboardKeyName(65)
KeyboardKeyName(#PB_Key_F8) = GetKeyboardKeyName(66)
KeyboardKeyName(#PB_Key_F9) = GetKeyboardKeyName(67)
KeyboardKeyName(#PB_Key_F10) = GetKeyboardKeyName(68)
KeyboardKeyName(#PB_Key_F11) = GetKeyboardKeyName(87)
KeyboardKeyName(#PB_Key_F12) = GetKeyboardKeyName(88)
KeyboardKeyName(183) = GetKeyboardKeyName(55, 1)
KeyboardKeyName(#PB_Key_Scroll) = GetKeyboardKeyName(70)
KeyboardKeyName(#PB_Key_Pause) = GetKeyboardKeyName(69)
KeyboardKeyName(#PB_Key_Grave) = GetKeyboardKeyName(41)
KeyboardKeyName(#PB_Key_1) = GetKeyboardKeyName(2)
KeyboardKeyName(#PB_Key_2) = GetKeyboardKeyName(3)
KeyboardKeyName(#PB_Key_3) = GetKeyboardKeyName(4)
KeyboardKeyName(#PB_Key_4) = GetKeyboardKeyName(5)
KeyboardKeyName(#PB_Key_5) = GetKeyboardKeyName(6)
KeyboardKeyName(#PB_Key_6) = GetKeyboardKeyName(7)
KeyboardKeyName(#PB_Key_7) = GetKeyboardKeyName(8)
KeyboardKeyName(#PB_Key_8) = GetKeyboardKeyName(9)
KeyboardKeyName(#PB_Key_9) = GetKeyboardKeyName(10)
KeyboardKeyName(#PB_Key_0) = GetKeyboardKeyName(11)
KeyboardKeyName(#PB_Key_Minus) = GetKeyboardKeyName(12)
KeyboardKeyName(#PB_Key_Equals) = GetKeyboardKeyName(13)
KeyboardKeyName(#PB_Key_Back) = GetKeyboardKeyName(14)
KeyboardKeyName(#PB_Key_Tab) = GetKeyboardKeyName(15)
KeyboardKeyName(#PB_Key_Q) = GetKeyboardKeyName(16)
KeyboardKeyName(#PB_Key_W) = GetKeyboardKeyName(17)
KeyboardKeyName(#PB_Key_E) = GetKeyboardKeyName(18)
KeyboardKeyName(#PB_Key_R) = GetKeyboardKeyName(19)
KeyboardKeyName(#PB_Key_T) = GetKeyboardKeyName(20)
KeyboardKeyName(#PB_Key_Y) = GetKeyboardKeyName(21)
KeyboardKeyName(#PB_Key_U) = GetKeyboardKeyName(22)
KeyboardKeyName(#PB_Key_I) = GetKeyboardKeyName(23)
KeyboardKeyName(#PB_Key_O) = GetKeyboardKeyName(24)
KeyboardKeyName(#PB_Key_P) = GetKeyboardKeyName(25)
KeyboardKeyName(#PB_Key_LeftBracket) = GetKeyboardKeyName(26)
KeyboardKeyName(#PB_Key_RightBracket) = GetKeyboardKeyName(27)
KeyboardKeyName(#PB_Key_Return) = GetKeyboardKeyName(28)
KeyboardKeyName(#PB_Key_Capital) = GetKeyboardKeyName(58)
KeyboardKeyName(#PB_Key_A) = GetKeyboardKeyName(30)
KeyboardKeyName(#PB_Key_S) = GetKeyboardKeyName(31)
KeyboardKeyName(#PB_Key_D) = GetKeyboardKeyName(32)
KeyboardKeyName(#PB_Key_F) = GetKeyboardKeyName(33)
KeyboardKeyName(#PB_Key_G) = GetKeyboardKeyName(34)
KeyboardKeyName(#PB_Key_H) = GetKeyboardKeyName(35)
KeyboardKeyName(#PB_Key_J) = GetKeyboardKeyName(36)
KeyboardKeyName(#PB_Key_K) = GetKeyboardKeyName(37)
KeyboardKeyName(#PB_Key_L) = GetKeyboardKeyName(38)
KeyboardKeyName(#PB_Key_SemiColon) = GetKeyboardKeyName(39)
KeyboardKeyName(#PB_Key_Apostrophe) = GetKeyboardKeyName(40)
KeyboardKeyName(#PB_Key_BackSlash) = GetKeyboardKeyName(43)
KeyboardKeyName(#PB_Key_LeftShift) = GetKeyboardKeyName(42)
KeyboardKeyName(86) = GetKeyboardKeyName(86)
KeyboardKeyName(#PB_Key_Z) = GetKeyboardKeyName(44)
KeyboardKeyName(#PB_Key_X) = GetKeyboardKeyName(45)
KeyboardKeyName(#PB_Key_C) = GetKeyboardKeyName(46)
KeyboardKeyName(#PB_Key_V) = GetKeyboardKeyName(47)
KeyboardKeyName(#PB_Key_B) = GetKeyboardKeyName(48)
KeyboardKeyName(#PB_Key_N) = GetKeyboardKeyName(49)
KeyboardKeyName(#PB_Key_M) = GetKeyboardKeyName(50)
KeyboardKeyName(#PB_Key_Comma) = GetKeyboardKeyName(51)
KeyboardKeyName(#PB_Key_Period) = GetKeyboardKeyName(52)
KeyboardKeyName(#PB_Key_Slash) = GetKeyboardKeyName(53)
KeyboardKeyName(#PB_Key_RightShift) = GetKeyboardKeyName(54)
KeyboardKeyName(#PB_Key_LeftControl) = GetKeyboardKeyName(29)
KeyboardKeyName(219) = GetKeyboardKeyName(91, 1)
KeyboardKeyName(#PB_Key_LeftAlt) = GetKeyboardKeyName(56)
KeyboardKeyName(#PB_Key_Space) = GetKeyboardKeyName(57)
KeyboardKeyName(#PB_Key_RightAlt) = GetKeyboardKeyName(56, 1)
KeyboardKeyName(220) = GetKeyboardKeyName(92, 1)
KeyboardKeyName(221) = GetKeyboardKeyName(93, 1)
KeyboardKeyName(#PB_Key_RightControl) = GetKeyboardKeyName(29, 1)
KeyboardKeyName(#PB_Key_Insert) = GetKeyboardKeyName(82, 1)
KeyboardKeyName(#PB_Key_Home) = GetKeyboardKeyName(71, 1)
KeyboardKeyName(#PB_Key_PageUp) = GetKeyboardKeyName(73, 1)
KeyboardKeyName(#PB_Key_Delete) = GetKeyboardKeyName(83, 1)
KeyboardKeyName(#PB_Key_End) = GetKeyboardKeyName(79, 1)
KeyboardKeyName(#PB_Key_PageDown) = GetKeyboardKeyName(81, 1)
KeyboardKeyName(#PB_Key_Up) = GetKeyboardKeyName(72, 1)
KeyboardKeyName(#PB_Key_Left) = GetKeyboardKeyName(75, 1)
KeyboardKeyName(#PB_Key_Down) = GetKeyboardKeyName(80, 1)
KeyboardKeyName(#PB_Key_Right) = GetKeyboardKeyName(77, 1)
KeyboardKeyName(#PB_Key_NumLock) = GetKeyboardKeyName(69, 1)
KeyboardKeyName(#PB_Key_Divide) = GetKeyboardKeyName(53, 1)
KeyboardKeyName(#PB_Key_Multiply) = GetKeyboardKeyName(55)
KeyboardKeyName(#PB_Key_Subtract) = GetKeyboardKeyName(74)
KeyboardKeyName(#PB_Key_Pad7) = GetKeyboardKeyName(71)
KeyboardKeyName(#PB_Key_Pad8) = GetKeyboardKeyName(72)
KeyboardKeyName(#PB_Key_Pad9) = GetKeyboardKeyName(73)
KeyboardKeyName(#PB_Key_Pad4) = GetKeyboardKeyName(75)
KeyboardKeyName(#PB_Key_Pad5) = GetKeyboardKeyName(76)
KeyboardKeyName(#PB_Key_Pad6) = GetKeyboardKeyName(77)
KeyboardKeyName(#PB_Key_Add) = GetKeyboardKeyName(78)
KeyboardKeyName(#PB_Key_Pad1) = GetKeyboardKeyName(79)
KeyboardKeyName(#PB_Key_Pad2) = GetKeyboardKeyName(80)
KeyboardKeyName(#PB_Key_Pad3) = GetKeyboardKeyName(81)
KeyboardKeyName(#PB_Key_Pad0) = GetKeyboardKeyName(82)
KeyboardKeyName(#PB_Key_Decimal) = GetKeyboardKeyName(83)
KeyboardKeyName(#PB_Key_PadEnter) = GetKeyboardKeyName(28, 1)
Code zum testen:
Code: Alles auswählen
InitSprite()
InitKeyboard()
OpenWindow(0, 0, 0, 800, 600, "Screen", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0)
Repeat
ClearScreen(0)
ExamineKeyboard()
For n = 0 To 255
If KeyboardReleased(n)
Debug KeyboardKeyName(n)
EndIf
Next
FlipBuffers()
Until WindowEvent() = #PB_Event_CloseWindow
Re: Tastennamen von KeyboardPushed-KeyIDs
Verfasst: 16.10.2010 02:34
von CSHW89
habs mal getestet. hab aber auch nur ne deutsche tastuatur.
zwei tasten geben als namen nur " (ZECHNERTASTATUR)" an. nämlich '/' und '*' am pad. ansonsten die linken tasten 'STRG' und 'UMSCHALT' haben kein '-LINKS' als zusatz, die rechten aber schon. aber naja so schlimm ist das ja auch nicht, da sich die namen ja unterscheiden, also 'STRG' und 'STRG-RECHTS'.
lg kevin
Re: Tastennamen von KeyboardPushed-KeyIDs
Verfasst: 16.10.2010 16:45
von STARGÅTE
Danke für den Report ...
Den Fehler auf dem NummerPad mit / und * habe ich auch bemerkt. (Dachte liegt an meiner Win-Version)
Da es jedoch auf anderen Sprachen richtig funktioniert (englisch), muss es scheinbar n Fehler in "der Deutschen Übersetzung" sein.
Somit also kein Bug, an der Prozedur selbst, sonden in irgendeiner Datenbank in der die Namen stehen.
Das mit den Steuerungstasten lässt sich nicht umgehen, aber eine Unterscheidung ist ja trotzdem möglich ...
Re: Tastennamen von KeyboardPushed-KeyIDs
Verfasst: 23.10.2010 03:50
von Regenduft
Sorry, wenn ich hier rumbuddel, aber wollte die Warnung loswerden, dass (zumindest bei mir auf WinXP SP3) AltGr bei sämtlichen Keyboard-Funktionen (also auch APIs wie GetAsyncKeyState, SendInput, Keybd_event...) seltsame und immer unterschiedliche Werte benötigt/rückgibt. AltGr entspricht ja Strg+Alt: Mal ist's Links, mal Rechts, mal "die undefinierte Mitte"...