Tastennamen von KeyboardPushed-KeyIDs
Tastennamen von KeyboardPushed-KeyIDs
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.
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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Tastennamen von KeyboardPushed-KeyIDs
Es sollte neben #VK_CONTROL auch noch #VK_RIGHT_CONTROL und #VK_LEFT_CONTROL geben.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.
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.Sachen aus dem CodeArchiv (mit GetKeyNameText_, MapVirtualKey_, usw.) funktionieren nicht zu 100%.
Re: Tastennamen von KeyboardPushed-KeyIDs
OK, stimmt, sie heißenBatze hat geschrieben:Es sollte neben #VK_CONTROL auch noch #VK_RIGHT_CONTROL und #VK_LEFT_CONTROL geben.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.
#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*
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Tastennamen von KeyboardPushed-KeyIDs
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)
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.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
Re: Tastennamen von KeyboardPushed-KeyIDs
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 zum testen:
- 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: 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Tastennamen von KeyboardPushed-KeyIDs
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
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



http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Re: Tastennamen von KeyboardPushed-KeyIDs
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 ...
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 ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Tastennamen von KeyboardPushed-KeyIDs
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"...
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)