Tastennamen von KeyboardPushed-KeyIDs

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Tastennamen von KeyboardPushed-KeyIDs

Beitrag 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.
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
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Re: Tastennamen von KeyboardPushed-KeyIDs

Beitrag 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.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Tastennamen von KeyboardPushed-KeyIDs

Beitrag 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
:freak:

*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
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Re: Tastennamen von KeyboardPushed-KeyIDs

Beitrag 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.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Tastennamen von KeyboardPushed-KeyIDs

Beitrag 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
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
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Tastennamen von KeyboardPushed-KeyIDs

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Tastennamen von KeyboardPushed-KeyIDs

Beitrag 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 ...
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
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: Tastennamen von KeyboardPushed-KeyIDs

Beitrag 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"...
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Antworten