KeyName / KeyCode ID

Share your advanced PureBasic knowledge/code with the community.
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

KeyName / KeyCode ID

Post by netmaestro »

This is a pair of procs to help you identify any key on your keyboard by code or name. KeyCode() returns the numeric code for a key name such as "VK_ESCAPE", KeyName() returns the text name for a numeric keycode. There's a little demo prog you can play with tacked on to show how the procs are working. Hope you find it useful!

Code: Select all

Procedure.s KeyName(vk_code)
  Select vk_code
    Case  $01 : ret$ = "#VK_LBUTTON"    
    Case  $02 : ret$ = "#VK_RBUTTON"   
    Case  $03 : ret$ = "#VK_CANCEL"    
    Case  $04 : ret$ = "#VK_MBUTTON"    
    Case  $05 : ret$ = "#VK_XBUTTON1"   
    Case  $06 : ret$ = "#VK_XBUTTON2"   
    Case  $08 : ret$ = "#VK_BACK"    
    Case  $09 : ret$ = "#VK_TAB"     
    Case  $0C : ret$ = "#VK_CLEAR"   
    Case  $0D : ret$ = "#VK_RETURN"    
    Case  $10 : ret$ = "#VK_SHIFT"   
    Case  $11 : ret$ = "#VK_CONTROL"   
    Case  $12 : ret$ = "#VK_MENU"    
    Case  $13 : ret$ = "#VK_PAUSE"   
    Case  $14 : ret$ = "#VK_CAPITAL"   
    Case  $15 : ret$ = "#VK_KANA"    
    Case  $15 : ret$ = "#VK_HANGEUL"    
    Case  $15 : ret$ = "#VK_HANGUL"    
    Case  $17 : ret$ = "#VK_JUNJA"   
    Case  $18 : ret$ = "#VK_FINAL"   
    Case  $19 : ret$ = "#VK_HANJA"   
    Case  $19 : ret$ = "#VK_KANJI"   
    Case  $1B : ret$ = "#VK_ESCAPE"    
    Case  $1C : ret$ = "#VK_CONVERT"   
    Case  $1D : ret$ = "#VK_NONCONVERT"  
    Case  $1E : ret$ = "#VK_ACCEPT"    
    Case  $1F : ret$ = "#VK_MODECHANGE"  
    Case  $20 : ret$ = "#VK_SPACE"   
    Case  $21 : ret$ = "#VK_PRIOR"   
    Case  $22 : ret$ = "#VK_NEXT"    
    Case  $23 : ret$ = "#VK_END"     
    Case  $24 : ret$ = "#VK_HOME"    
    Case  $25 : ret$ = "#VK_LEFT"    
    Case  $26 : ret$ = "#VK_UP"    
    Case  $27 : ret$ = "#VK_RIGHT"   
    Case  $28 : ret$ = "#VK_DOWN"    
    Case  $29 : ret$ = "#VK_SELECT"    
    Case  $2A : ret$ = "#VK_PRINT"   
    Case  $2B : ret$ = "#VK_EXECUTE"   
    Case  $2C : ret$ = "#VK_SNAPSHOT"  
    Case  $2D : ret$ = "#VK_INSERT"    
    Case  $2E : ret$ = "#VK_DELETE"    
    Case  $2F : ret$ = "#VK_HELP"    
    Case  $30 : ret$ = "#VK_0"
    Case  $31 : ret$ = "#VK_1"
    Case  $32 : ret$ = "#VK_2"
    Case  $33 : ret$ = "#VK_3"
    Case  $34 : ret$ = "#VK_4"
    Case  $35 : ret$ = "#VK_5"
    Case  $36 : ret$ = "#VK_6"
    Case  $37 : ret$ = "#VK_7"
    Case  $38 : ret$ = "#VK_8"
    Case  $39 : ret$ = "#VK_9"
    Case  $41 : ret$ = "#VK_A"
    Case  $42 : ret$ = "#VK_B"
    Case  $43 : ret$ = "#VK_C"
    Case  $44 : ret$ = "#VK_D"
    Case  $45 : ret$ = "#VK_E"
    Case  $46 : ret$ = "#VK_F"
    Case  $47 : ret$ = "#VK_G"
    Case  $48 : ret$ = "#VK_H"
    Case  $49 : ret$ = "#VK_I"
    Case  $4A : ret$ = "#VK_J"
    Case  $4B : ret$ = "#VK_K"
    Case  $4C : ret$ = "#VK_L"
    Case  $4D : ret$ = "#VK_M"
    Case  $4E : ret$ = "#VK_N"
    Case  $4F : ret$ = "#VK_O"
    Case  $50 : ret$ = "#VK_P"
    Case  $51 : ret$ = "#VK_Q"
    Case  $52 : ret$ = "#VK_R"
    Case  $53 : ret$ = "#VK_S"
    Case  $54 : ret$ = "#VK_T"
    Case  $55 : ret$ = "#VK_U"
    Case  $56 : ret$ = "#VK_V"
    Case  $57 : ret$ = "#VK_W"
    Case  $58 : ret$ = "#VK_X"
    Case  $59 : ret$ = "#VK_Y"
    Case  $5A : ret$ = "#VK_Z"
    Case  $5B : ret$ = "#VK_LWIN"    
    Case  $5C : ret$ = "#VK_RWIN"    
    Case  $5D : ret$ = "#VK_APPS"    
    Case  $5F : ret$ = "#VK_SLEEP"   
    Case  $60 : ret$ = "#VK_NUMPAD0"   
    Case  $61 : ret$ = "#VK_NUMPAD1"   
    Case  $62 : ret$ = "#VK_NUMPAD2"   
    Case  $63 : ret$ = "#VK_NUMPAD3"   
    Case  $64 : ret$ = "#VK_NUMPAD4"   
    Case  $65 : ret$ = "#VK_NUMPAD5"   
    Case  $66 : ret$ = "#VK_NUMPAD6"   
    Case  $67 : ret$ = "#VK_NUMPAD7"   
    Case  $68 : ret$ = "#VK_NUMPAD8"   
    Case  $69 : ret$ = "#VK_NUMPAD9"   
    Case  $6A : ret$ = "#VK_MULTIPLY"  
    Case  $6B : ret$ = "#VK_ADD"     
    Case  $6C : ret$ = "#VK_SEPARATOR"   
    Case  $6D : ret$ = "#VK_SUBTRACT"  
    Case  $6E : ret$ = "#VK_DECIMAL"   
    Case  $6F : ret$ = "#VK_DIVIDE"    
    Case  $70 : ret$ = "#VK_F1"    
    Case  $71 : ret$ = "#VK_F2"    
    Case  $72 : ret$ = "#VK_F3"    
    Case  $73 : ret$ = "#VK_F4"    
    Case  $74 : ret$ = "#VK_F5"    
    Case  $75 : ret$ = "#VK_F6"    
    Case  $76 : ret$ = "#VK_F7"    
    Case  $77 : ret$ = "#VK_F8"    
    Case  $78 : ret$ = "#VK_F9"    
    Case  $79 : ret$ = "#VK_F10"     
    Case  $7A : ret$ = "#VK_F11"     
    Case  $7B : ret$ = "#VK_F12"     
    Case  $7C : ret$ = "#VK_F13"     
    Case  $7D : ret$ = "#VK_F14"     
    Case  $7E : ret$ = "#VK_F15"     
    Case  $7F : ret$ = "#VK_F16"     
    Case  $80 : ret$ = "#VK_F17"     
    Case  $81 : ret$ = "#VK_F18"     
    Case  $82 : ret$ = "#VK_F19"     
    Case  $83 : ret$ = "#VK_F20"     
    Case  $84 : ret$ = "#VK_F21"     
    Case  $85 : ret$ = "#VK_F22"     
    Case  $86 : ret$ = "#VK_F23"     
    Case  $87 : ret$ = "#VK_F24"     
    Case  $90 : ret$ = "#VK_NUMLOCK"
    Case  $91 : ret$ = "#VK_SCROLL"    
    Case  $A0 : ret$ = "#VK_LSHIFT"    
    Case  $A1 : ret$ = "#VK_RSHIFT"    
    Case  $A2 : ret$ = "#VK_LCONTROL"  
    Case  $A3 : ret$ = "#VK_RCONTROL"  
    Case  $A4 : ret$ = "#VK_LMENU"   
    Case  $A5 : ret$ = "#VK_RMENU"   
    Case  $A6 : ret$ = "#VK_BROWSER_BACK"   
    Case  $A7 : ret$ = "#VK_BROWSER_FORWARD"  
    Case  $A8 : ret$ = "#VK_BROWSER_REFRESH"  
    Case  $A9 : ret$ = "#VK_BROWSER_STOP"   
    Case  $AA : ret$ = "#VK_BROWSER_SEARCH"   
    Case  $AB : ret$ = "#VK_BROWSER_FAVORITES"  
    Case  $AC : ret$ = "#VK_BROWSER_HOME"   
    Case  $AD : ret$ = "#VK_VOLUME_MUTE"    
    Case  $AE : ret$ = "#VK_VOLUME_DOWN"    
    Case  $AF : ret$ = "#VK_VOLUME_UP"    
    Case  $B0 : ret$ = "#VK_MEDIA_NEXT_TRACK" 
    Case  $B1 : ret$ = "#VK_MEDIA_PREV_TRACK" 
    Case  $B2 : ret$ = "#VK_MEDIA_STOP"   
    Case  $B3 : ret$ = "#VK_MEDIA_PLAY_PAUSE" 
    Case  $B4 : ret$ = "#VK_LAUNCH_MAIL"    
    Case  $B5 : ret$ = "#VK_LAUNCH_MEDIA_SELECT"
    Case  $B6 : ret$ = "#VK_LAUNCH_APP1" 
    Case  $B7 : ret$ = "#VK_LAUNCH_APP2" 
    Case  $BA : ret$ = "#VK_OEM_1"   
    Case  $BB : ret$ = "#VK_OEM_PLUS"  
    Case  $BC : ret$ = "#VK_OEM_COMMA"   
    Case  $BD : ret$ = "#VK_OEM_MINUS"   
    Case  $BE : ret$ = "#VK_OEM_PERIOD"  
    Case  $BF : ret$ = "#VK_OEM_2"   
    Case  $C0 : ret$ = "#VK_OEM_3"   
    Case  $DB : ret$ = "#VK_OEM_4"   
    Case  $DC : ret$ = "#VK_OEM_5"   
    Case  $DD : ret$ = "#VK_OEM_6"   
    Case  $DE : ret$ = "#VK_OEM_7"   
    Case  $DF : ret$ = "#VK_OEM_8"   
    Case  $E1 : ret$ = "#VK_OEM_AX"    
    Case  $E2 : ret$ = "#VK_OEM_102"   
    Case  $E3 : ret$ = "#VK_ICO_HELP"  
    Case  $E4 : ret$ = "#VK_ICO_00"    
    Case  $E5 : ret$ = "#VK_PROCESSKEY"  
    Case  $E6 : ret$ = "#VK_ICO_CLEAR"   
    Case  $E7 : ret$ = "#VK_PACKET"    
    Case  $E9 : ret$ = "#VK_OEM_RESET"   
    Case  $EA : ret$ = "#VK_OEM_JUMP"  
    Case  $EB : ret$ = "#VK_OEM_PA1"   
    Case  $EC : ret$ = "#VK_OEM_PA2"   
    Case  $ED : ret$ = "#VK_OEM_PA3"   
    Case  $EE : ret$ = "#VK_OEM_WSCTRL"  
    Case  $EF : ret$ = "#VK_OEM_CUSEL"   
    Case  $F0 : ret$ = "#VK_OEM_ATTN"  
    Case  $F1 : ret$ = "#VK_OEM_FINISH"  
    Case  $F2 : ret$ = "#VK_OEM_COPY"  
    Case  $F3 : ret$ = "#VK_OEM_AUTO"  
    Case  $F4 : ret$ = "#VK_OEM_ENLW"  
    Case  $F5 : ret$ = "#VK_OEM_BACKTAB" 
    Case  $F6 : ret$ = "#VK_ATTN"    
    Case  $F7 : ret$ = "#VK_CRSEL"   
    Case  $F8 : ret$ = "#VK_EXSEL"   
    Case  $F9 : ret$ = "#VK_EREOF"   
    Case  $FA : ret$ = "#VK_PLAY"    
    Case  $FB : ret$ = "#VK_ZOOM"   
    Case  $FC : ret$ = "#VK_NONAME"    
    Case  $FD : ret$ = "#VK_PA1"     
    Case  $FE : ret$ = "#VK_OEM_CLEAR"   
    Default : ret$ = "UNKNOWN"
  EndSelect
  ProcedureReturn ret$
EndProcedure

Procedure KeyCode(vk_name$)
  If Left(vk_name$, 1) <> "#"
    vk_name$ = "#"+vk_name$
  EndIf
  Select UCase(vk_name$)
    Case "#VK_LBUTTON" : ret = $01 
    Case "#VK_RBUTTON" : ret = $02 
    Case "#VK_CANCEL" : ret = $03 
    Case "#VK_MBUTTON" : ret = $04 
    Case "#VK_XBUTTON1" : ret = $05 
    Case "#VK_XBUTTON2" : ret = $06 
    Case "#VK_BACK" : ret = $08 
    Case "#VK_TAB" : ret = $09 
    Case "#VK_CLEAR" : ret = $0C 
    Case "#VK_RETURN" : ret = $0D 
    Case "#VK_SHIFT" : ret = $10 
    Case "#VK_CONTROL" : ret = $11 
    Case "#VK_MENU" : ret = $12 
    Case "#VK_PAUSE" : ret = $13 
    Case "#VK_CAPITAL" : ret = $14 
    Case "#VK_KANA" : ret = $15 
    Case "#VK_HANGEUL" : ret = $15 
    Case "#VK_HANGUL" : ret = $15 
    Case "#VK_JUNJA" : ret = $17 
    Case "#VK_FINAL" : ret = $18 
    Case "#VK_HANJA" : ret = $19 
    Case "#VK_KANJI" : ret = $19 
    Case "#VK_ESCAPE" : ret = $1B 
    Case "#VK_CONVERT" : ret = $1C 
    Case "#VK_NONCONVERT" : ret = $1D 
    Case "#VK_ACCEPT" : ret = $1E 
    Case "#VK_MODECHANGE" : ret = $1F 
    Case "#VK_SPACE" : ret = $20 
    Case "#VK_PRIOR" : ret = $21 
    Case "#VK_NEXT" : ret = $22 
    Case "#VK_END" : ret = $23 
    Case "#VK_HOME" : ret = $24 
    Case "#VK_LEFT" : ret = $25 
    Case "#VK_UP" : ret = $26 
    Case "#VK_RIGHT" : ret = $27 
    Case "#VK_DOWN" : ret = $28 
    Case "#VK_SELECT" : ret = $29 
    Case "#VK_PRINT" : ret = $2A 
    Case "#VK_EXECUTE" : ret = $2B 
    Case "#VK_SNAPSHOT" : ret = $2C 
    Case "#VK_INSERT" : ret = $2D 
    Case "#VK_DELETE" : ret = $2E 
    Case "#VK_HELP" : ret = $2F 
    Case "#VK_0" : ret = $30 
    Case "#VK_1" : ret = $31 
    Case "#VK_2" : ret = $32 
    Case "#VK_3" : ret = $33 
    Case "#VK_4" : ret = $34 
    Case "#VK_5" : ret = $35 
    Case "#VK_6" : ret = $36 
    Case "#VK_7" : ret = $37 
    Case "#VK_8" : ret = $38 
    Case "#VK_9" : ret = $39 
    Case "#VK_A" : ret = $41 
    Case "#VK_B" : ret = $42 
    Case "#VK_C" : ret = $43 
    Case "#VK_D" : ret = $44 
    Case "#VK_E" : ret = $45 
    Case "#VK_F" : ret = $46 
    Case "#VK_G" : ret = $47 
    Case "#VK_H" : ret = $48 
    Case "#VK_I" : ret = $49 
    Case "#VK_J" : ret = $4A 
    Case "#VK_K" : ret = $4B 
    Case "#VK_L" : ret = $4C 
    Case "#VK_M" : ret = $4D 
    Case "#VK_N" : ret = $4E 
    Case "#VK_O" : ret = $4F 
    Case "#VK_P" : ret = $50 
    Case "#VK_Q" : ret = $51 
    Case "#VK_R" : ret = $52 
    Case "#VK_S" : ret = $53 
    Case "#VK_T" : ret = $54 
    Case "#VK_U" : ret = $55 
    Case "#VK_V" : ret = $56 
    Case "#VK_W" : ret = $57 
    Case "#VK_X" : ret = $58 
    Case "#VK_Y" : ret = $59 
    Case "#VK_Z" : ret = $5A 
    Case "#VK_LWIN" : ret = $5B 
    Case "#VK_RWIN" : ret = $5C 
    Case "#VK_APPS" : ret = $5D 
    Case "#VK_SLEEP" : ret = $5F 
    Case "#VK_NUMPAD0" : ret = $60 
    Case "#VK_NUMPAD1" : ret = $61 
    Case "#VK_NUMPAD2" : ret = $62 
    Case "#VK_NUMPAD3" : ret = $63 
    Case "#VK_NUMPAD4" : ret = $64 
    Case "#VK_NUMPAD5" : ret = $65 
    Case "#VK_NUMPAD6" : ret = $66 
    Case "#VK_NUMPAD7" : ret = $67 
    Case "#VK_NUMPAD8" : ret = $68 
    Case "#VK_NUMPAD9" : ret = $69 
    Case "#VK_MULTIPLY" : ret = $6A 
    Case "#VK_ADD" : ret = $6B 
    Case "#VK_SEPARATOR" : ret = $6C 
    Case "#VK_SUBTRACT" : ret = $6D 
    Case "#VK_DECIMAL" : ret = $6E 
    Case "#VK_DIVIDE" : ret = $6F 
    Case "#VK_F1" : ret = $70 
    Case "#VK_F2" : ret = $71 
    Case "#VK_F3" : ret = $72 
    Case "#VK_F4" : ret = $73 
    Case "#VK_F5" : ret = $74 
    Case "#VK_F6" : ret = $75 
    Case "#VK_F7" : ret = $76 
    Case "#VK_F8" : ret = $77 
    Case "#VK_F9" : ret = $78 
    Case "#VK_F10" : ret = $79 
    Case "#VK_F11" : ret = $7A 
    Case "#VK_F12" : ret = $7B 
    Case "#VK_F13" : ret = $7C 
    Case "#VK_F14" : ret = $7D 
    Case "#VK_F15" : ret = $7E 
    Case "#VK_F16" : ret = $7F 
    Case "#VK_F17" : ret = $80 
    Case "#VK_F18" : ret = $81 
    Case "#VK_F19" : ret = $82 
    Case "#VK_F20" : ret = $83 
    Case "#VK_F21" : ret = $84 
    Case "#VK_F22" : ret = $85 
    Case "#VK_F23" : ret = $86 
    Case "#VK_F24" : ret = $87 
    Case "#VK_NUMLOCK" : ret = $90 
    Case "#VK_SCROLL" : ret = $91 
    Case "#VK_LSHIFT" : ret = $A0 
    Case "#VK_RSHIFT" : ret = $A1 
    Case "#VK_LCONTROL" : ret = $A2 
    Case "#VK_RCONTROL" : ret = $A3 
    Case "#VK_LMENU" : ret = $A4 
    Case "#VK_RMENU" : ret = $A5 
    Case "#VK_BROWSER_BACK" : ret = $A6 
    Case "#VK_BROWSER_FORWARD" : ret = $A7 
    Case "#VK_BROWSER_REFRESH" : ret = $A8 
    Case "#VK_BROWSER_STOP" : ret = $A9 
    Case "#VK_BROWSER_SEARCH" : ret = $AA 
    Case "#VK_BROWSER_FAVORITES" : ret = $AB 
    Case "#VK_BROWSER_HOME" : ret = $AC 
    Case "#VK_VOLUME_MUTE" : ret = $AD 
    Case "#VK_VOLUME_DOWN" : ret = $AE 
    Case "#VK_VOLUME_UP" : ret = $AF 
    Case "#VK_MEDIA_NEXT_TRACK" : ret = $B0 
    Case "#VK_MEDIA_PREV_TRACK" : ret = $B1 
    Case "#VK_MEDIA_STOP" : ret = $B2 
    Case "#VK_MEDIA_PLAY_PAUSE" : ret = $B3 
    Case "#VK_LAUNCH_MAIL" : ret = $B4 
    Case "#VK_LAUNCH_MEDIA_SELECT" : ret = $B5 
    Case "#VK_LAUNCH_APP1" : ret = $B6 
    Case "#VK_LAUNCH_APP2" : ret = $B7 
    Case "#VK_OEM_1" : ret = $BA 
    Case "#VK_OEM_PLUS" : ret = $BB 
    Case "#VK_OEM_COMMA" : ret = $BC 
    Case "#VK_OEM_MINUS" : ret = $BD 
    Case "#VK_OEM_PERIOD" : ret = $BE 
    Case "#VK_OEM_2" : ret = $BF 
    Case "#VK_OEM_3" : ret = $C0 
    Case "#VK_OEM_4" : ret = $DB 
    Case "#VK_OEM_5" : ret = $DC 
    Case "#VK_OEM_6" : ret = $DD 
    Case "#VK_OEM_7" : ret = $DE 
    Case "#VK_OEM_8" : ret = $DF 
    Case "#VK_OEM_AX" : ret = $E1 
    Case "#VK_OEM_102" : ret = $E2 
    Case "#VK_ICO_HELP" : ret = $E3 
    Case "#VK_ICO_00" : ret = $E4 
    Case "#VK_PROCESSKEY" : ret = $E5 
    Case "#VK_ICO_CLEAR" : ret = $E6 
    Case "#VK_PACKET" : ret = $E7 
    Case "#VK_OEM_RESET" : ret = $E9 
    Case "#VK_OEM_JUMP" : ret = $EA 
    Case "#VK_OEM_PA1" : ret = $EB 
    Case "#VK_OEM_PA2" : ret = $EC 
    Case "#VK_OEM_PA3" : ret = $ED 
    Case "#VK_OEM_WSCTRL" : ret = $EE 
    Case "#VK_OEM_CUSEL" : ret = $EF 
    Case "#VK_OEM_ATTN" : ret = $F0 
    Case "#VK_OEM_FINISH" : ret = $F1 
    Case "#VK_OEM_COPY" : ret = $F2 
    Case "#VK_OEM_AUTO" : ret = $F3 
    Case "#VK_OEM_ENLW" : ret = $F4 
    Case "#VK_OEM_BACKTAB" : ret = $F5 
    Case "#VK_ATTN" : ret = $F6 
    Case "#VK_CRSEL" : ret = $F7 
    Case "#VK_EXSEL" : ret = $F8 
    Case "#VK_EREOF" : ret = $F9 
    Case "#VK_PLAY" : ret = $FA 
    Case "#VK_ZOOM" : ret = $FB 
    Case "#VK_NONAME" : ret = $FC 
    Case "#VK_PA1" : ret = $FD 
    Case "#VK_OEM_CLEAR" : ret = $FE 
    Default : ret = 0
  EndSelect
  ProcedureReturn ret
EndProcedure


;---------------------------------------------------
;      Test Program, key in some codes or names
;---------------------------------------------------

ProcedureDLL.l IsSimpleNumber(String$) 
  If String$ 
    *p.character = @String$ 
    Repeat 
      char = *p\c
      If (char >= '0' And char <= '9') Or char=0 
        *p+1 
      Else 
        ProcedureReturn 0 
      EndIf 
    Until char = 0 
    ProcedureReturn 1 
  EndIf 
EndProcedure 

OpenWindow(0,0,0,320,120,"KeyName/Code ID",$cf0001)
CreateGadgetList(WindowID(0))
TextGadget(0,100,20,200,20, "")
StringGadget(1, 20, 50, 200, 20, "")
ButtonGadget(2, 225, 50, 60, 20, "Show")
Repeat
  ev = WaitWindowEvent()
  Select ev
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 2
          If IsSimpleNumber(GetGadgetText(1))
            SetGadgetText(0, UCase(GetGadgetText(1))+"= " + KeyName(Val(GetGadgetText(1))))
          Else
            SetGadgetText(0, UCase(GetGadgetText(1))+"= " + Str(KeyCode(GetGadgetText(1))))
          EndIf
      EndSelect
    Case #WM_KEYDOWN
      SetGadgetText(0, KeyName(EventwParam()))
   EndSelect
Until ev = #WM_CLOSE
yrreti
Enthusiast
Enthusiast
Posts: 546
Joined: Tue Oct 31, 2006 4:34 am

Post by yrreti »

Thank you very much netmaestro
---- :D ----
I know I'm going to set that up as a tool for a quick reference for future use.
The only thing I had to change though, is ret to rtn, because I have
the inline asm checked, and it don't like ret.

yrreti
yrreti
Enthusiast
Enthusiast
Posts: 546
Joined: Tue Oct 31, 2006 4:34 am

Post by yrreti »

netmaestro, thank you very much again.:D :D :D
The exe works great as a tool under the Tools menu of the IDE.

yrreti
Bonne_den_kule
Addict
Addict
Posts: 841
Joined: Mon Jun 07, 2004 7:10 pm

Post by Bonne_den_kule »

Code: Select all

Procedure.s GetKeyName(ascii)
  Define name$=Space(255) ; Prepare string to hold name of the desired key.
  GetKeyNameText_(MapVirtualKey_(ascii,0)*$10000,name$,255) ; Get key name.
  ProcedureReturn Trim(name$)
EndProcedure

debug GetKeyName(#VK_TAB)
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Post by netmaestro »

I'm familiar with the code, it's not complete though:

Code: Select all

Debug GetKeyName(177) ; Should be VK_MEDIA_PREV_TRACK
                      ; This proc returns Q
It doesn't know a lot of the extended keys.
PB
PureBasic Expert
PureBasic Expert
Posts: 7581
Joined: Fri Apr 25, 2003 5:24 pm

Post by PB »

> I'm familiar with the code

That's because it's just a re-posting of my 4-year-old tip from here:
http://www.purebasic.fr/english/viewtopic.php?t=3760

> This proc returns Q

It doesn't return the #VK_* constants -- it just returns the ascii key name.
I compile using 5.31 (x86) on Win 7 Ultimate (64-bit).
"PureBasic won't be object oriented, period" - Fred.
User avatar
netmaestro
PureBasic Bullfrog
PureBasic Bullfrog
Posts: 8451
Joined: Wed Jul 06, 2005 5:42 am
Location: Fort Nelson, BC, Canada

Post by netmaestro »

OK, but the key name of the Media Prev Track key isn't Q.
PB
PureBasic Expert
PureBasic Expert
Posts: 7581
Joined: Fri Apr 25, 2003 5:24 pm

Post by PB »

> the key name of the Media Prev Track key isn't Q

Well, it is according to Windows. :)
User avatar
Rook Zimbabwe
Addict
Addict
Posts: 4322
Joined: Tue Jan 02, 2007 8:16 pm
Location: Cypress TX
Contact:

Post by Rook Zimbabwe »

Strangley enough... on ALL the US Keyboards tested it only reports #VK_SHIFT for either L or R Shift... and #VK_CONTROL for either L or R control... though I see both delineated in the program :?:
Binarily speaking... it takes 10 to Tango!!!

Image
http://www.bluemesapc.com/
hardfalcon
User
User
Posts: 89
Joined: Fri Apr 29, 2005 3:03 pm
Location: Luxembourg
Contact:

Post by hardfalcon »

Why don't use GetKEyNameText_() ? Makes your code much smaller and gives the key names in the keyboard layout language.

Code: Select all

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
"And God caused a deep sleep to fall upon Adam, and he slept: and he took one of his ribs, and closed up the flesh instead thereof; And the spare rib, which God had taken from man, made he a woman, and brought her unto the man"
PSB136
New User
New User
Posts: 4
Joined: Mon Jun 10, 2013 7:00 am

Re:

Post by PSB136 »

I'm trying to get the ASCII character of any given shifted and non-shifted key, on any given keyboard language. On an English keyboard, pressing "=" by itself should return "=", but pressing Shift plus "=" should return "+". Likewise, pressing Shift plus "/" should return "?" on an English keyboard. Anyone know how to do this? Thank you.
Post Reply