Jump to content

WhatKey?


Recommended Posts

Version 0.1: This is a simple Autoit Utility, You input the keyboard hex and it returns what key it is.. For instance you input '01', it will output 'Left mouse button', ect.

Version 0.2 Added conversion so you can select from either side, hex value "01", or keyvalue "Left mouse", and it will return info such as hotkey and a description. (the script was easy to write, descript/info was the hardest part because i did it by hand :)

<-- Edit: Changed it so it returns full info, description, hotkey, hexvalue, keyboard key.

> Version 0.2e: applied fixes, thanks to smashly.

> Version 0.2f: fixed: error when the key file contains a empty line. (thanks saunders)

> Version 0.2g: fixed database file, typoes, missing keys (thanks saunders)

Screenshot

Posted Image

Enjoy!

WhatKey.au3 (version 0.2g, Oct 13, 8:12 pm)

#include <GUIConstants.au3>
#include <GUICombo.au3>

$hGUI = GUICreate("WhatKey? v.0.2g", 290, 265, -1, -1)
$cmFile = GUICtrlCreateMenu('&File')
$cmExit = GUICtrlCreateMenuitem('&Exit',$cmFile)
$cmHelp = GUICtrlCreateMenu('&Help')
$cmAbout = GUICtrlCreateMenuitem('&About',$cmHelp)
GUICtrlCreateGroup("", 10, 7, 268, 226)
GUICtrlCreateLabel("Value", 22, 25, 31, 17)
$gcInput1 = GUICtrlCreateCombo("", 22, 49, 110, 21, $CBS_DROPDOWNLIST + $WS_VSCROLL)
$gcInput2 = GUICtrlCreateCombo("", 140, 49, 125, 21, $CBS_DROPDOWNLIST + $WS_VSCROLL)
GUICtrlCreateLabel("Results", 22, 76, 39, 17)
$gcResult = GUICtrlCreateEdit("", 22, 99, 244, 116, BitOR($ES_WANTRETURN,$WS_VSCROLL,$ES_MULTILINE,$ES_READONLY), $WS_EX_CLIENTEDGE)
GUICtrlSetBkColor(-1,0xffffff)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)

Local $sSeparator = '|'
Local $sKeyFile = _WKs_Init(@ScriptDir & '\Whatkey.dat', $sSeparator)
Local $aInput[2], $aResult = ''

While 1
    $msg = GuiGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE, $cmExit
            Exit
        Case $cmAbout
            MsgBox(0, 'About WhatKey?', 'WhatKey? is an Autoit keyboard helper')
        Case Else
            If GUICtrlRead($gcInput1) <> $aInput[0] Then
                _GUICtrlComboSetCurSel($gcInput2, _GUICtrlComboGetCurSel($gcInput1))
            ElseIf GUICtrlRead($gcInput2) <> $aInput[1] Then
                _GUICtrlComboSetCurSel($gcInput1, _GUICtrlComboGetCurSel($gcInput2))
                $aInput[0] = ''
            EndIf
            If GUICtrlRead($gcInput1) <> $aInput[0] Then
                $aInput[0] = GUICtrlRead($gcInput1)
                $aInput[1] = GUICtrlRead($gcInput2)
                $aResult = _WKS_Value($sKeyFile, $aInput[0], $sSeparator)
                If UBound($aResult)-1 <> 4 Or Not IsArray($aResult) Or @error Then
                    GUICtrlSetData($gcResult, 'An error has occured.')
                Else
                    GUICtrlSetData($gcResult, 'Description: '& $aResult[3] &@CRLF& 'Hotkey: '& $aResult[4]&@CRLF& _
                                              'Hex Value: '& $aResult[1] &@CRLF& 'Key: '& $aResult[2])
                EndIf
            EndIf
    EndSwitch
WEnd

Func _WKs_Init($sKeyDat, $sSeparator = "|")
    Local $aFileKeys = StringSplit(StringStripCR(FileRead($sKeyDat)),@LF)
    If @Error Then Return Msgbox(0,'Error', $sKeyDat & ' could not be read properly, please make sure it exists.')
    Local $aArray, $aString[2] = ['','']
    For $x = 1 To UBound($aFileKeys) - 1
        $aArray = StringSplit($aFileKeys[$x],$sSeparator)
        If @error Then ContinueLoop
        If $x = 1 Then
            Local $1st[2] = [$aArray[1],$aArray[2]]
        EndIf
        $aString[0] &= $aArray[1] & '|'
        $aString[1] &= $aArray[2] & '|'
    Next
    GUICtrlSetData($gcInput1, $aString[0], $1st[0])
    GUICtrlSetData($gcInput2, $aString[1], $1st[1])
    Return $aFileKeys
EndFunc

Func _WKS_Value($aKeys, $sValue,  $sASCII = 1, $sSeparator = "|")
    Local $aString
    If IsArray($aKeys) Then
        For $x = 1 To UBound($aKeys) - 1
            $aString = StringSplit($aKeys[$x],$sSeparator)
            If IsArray($aString) Then
                If $aString[1] = $sValue Then Return $aString
            EndIf
        Next
        Return SetError(2,0,"")
    EndIf
    Return SetError(1,0,"")
EndFunc

Whatkey.dat

CODE

01|Left Mouse|Left mouse button|{None}

02|Right Mouse|Right mouse button|{None}

04|Middle Mouse|Middle mouse button (three-button mouse)|{None}

05|X1 Button|Windows 2000/XP: X1 mouse button|{None}

06|X2 Button|Windows 2000/XP: X2 mouse button|{None}

08|Backspace|BACKSPACE key|{Backspace} or {BS}

09|Tab|TAB key|{Tab}

0C|Clear|CLEAR key|{Clear}

0D|Enter|ENTER key|{Enter}

10|Shift|SHIFT key|{Shift} or {#}

11|Ctrl|CTRL key|{Ctrl}

12|Alt|ALT key|{Alt}

13|Pause|PAUSE key|{Pause}

14|Capslock|CAPS LOCK key|{Capslock}

1B|Esc|ESC key|{Escape} or {Esc}

20|Space|SPACEBAR|{Space}

21|Pageup|PAGE UP key|{Pgup}

22|Pagedown|PAGE DOWN key|{Pgdown}

23|End|END key|{End}

24|Home|HOME key|{Home}

25|left|LEFT ARROW key|{Left}

26|Up|UP ARROW key|{Up}

27|Right|RIGHT ARROW key|{Right}

28|Down|DOWN ARROW key|{Down}

29|Select|SELECT key|{Select}

2A|Print|PRINT key|{Print}

2B|Execute|EXECUTE key|{Execute}

2C|PrintScreen|PRINT SCREEN key|{PrintScreen}

2D|Insert|INS key|{Insert} or {Ins}

2E|Delete|DEL key|{Delete} or {Del}

30|0|0 key|{0}

31|1|1 key|{1}

32|2|2 key|{2}

33|3|3 key|{3}

34|4|4 key|{4}

35|5|5 key|{5}

36|6|6 key|{6}

37|7|7 key|{7}

38|8|8 key|{8}

39|9|9 key|{9}

41|A|A key|{A}

42|B|B key|{B}

43|C|C key|{C}

44|D|D key|{D}

45|E|E key|{E}

46|F|F key|{F}

47|G|G key|{G}

48|H|H key|{H}

49|I|I key|{I}

4A|J|J key|{I}

4B|K|K key|{K}

4C|L|L key|{L}

4D|M|M key|{M}

4E|N|N key|{N}

4F|O|O key|{O}

50|P|P key|{P}

51|Q|Q key|{Q}

52|R|R key|{R}

53|S|S key|{S}

54|T|T key|{T}

55|U|U key|{U}

56|V|V key|{V}

57|W|W key|{W}

58|X|X key|{X}

59|Y|Y key|{Y}

5A|Z|Z key|{Z}

BA|;|Semi Colon|{;}

BB|=|Equals|{=}

BC|,|Comma|{,}

BD|-|Dash|{-}

BE|.|Period|{.}

BF|/|Forward Slash|{/}

C0|`|Prime|{`}

DB|[|Right Bracket|{[}

DC|\|Backslash|{\}

DD|]|Left Bracket|{]}

DE|'|Apostrophe key|{'}

5B|Left Winkey|Left Windows key| {LWIN}

5C|Right Winkey|Right Windows key| {RWIN}

60|Num0|Numeric keypad 0 key|{NUMPAD0}

61|Num1|Numeric keypad 1 key|{NUMPAD1}

62|Num2|Numeric keypad 2 key|{NUMPAD2}

63|Num3|Numeric keypad 3 key|{NUMPAD3}

64|Num4|Numeric keypad 4 key|{NUMPAD4}

65|Num5|Numeric keypad 5 key|{NUMPAD5}

66|Num6|Numeric keypad 6 key|{NUMPAD6}

67|Num7|Numeric keypad 7 key|{NUMPAD7}

68|Num8|Numeric keypad 8 key|{NUMPAD8}

69|Num9|Numeric keypad 9 key|{NUMPAD9}

6A|*|Multiply key|{NUMPADMULT}

6B|+|Add key|{NUMPADADD}

6C|NumEnter|Separator key|{NUMPADENTER}

6D|-|Subtract key|{NUMPADSUB}

6E|.|Decimal key|{NUMPADDOT}

6F|/|Divide key|{NUMPADDIV}

70|F1|F1 key|{F1}

71|F2|F2 key|{F2}

72|F3|F3 key|{F3}

73|F4|F4 key|{F4}

74|F5|F5 key|{F5}

75|F6|F6 key|{F6}

76|F7|F7 key|{F7}

77|F8|F8 key|{F8}

78|F9|F9 key|{F9}

79|F10|F10 key|{F10}

7A|F11|F11 key|{F11}

7B|F12|F12 key|{F12}

7C|F13|F13 key|{F13}

7D|F14|F14 key|{F14}

7E|F15|F15 key|{F15}

7F|F16|F16 key|{F16}

80H|F17|F17 key|{F17}

81H|F18|F18 key|{F18}

82H|F19|F19 key|{F19}

83H|F20|F20 key|{F20}

84H|F21|F21 key|{F21}

85H|F22|F22 key|{F22}

86H|F23|F23 key|{F23}

87H|F24|F24 key|{F24}

90|Numlock|NUM LOCK key|{Numlock}

91|Scrolllock|SCROLL LOCK key|{Scrollock}

A0|LeftShift|Left SHIFT key|{LShift}

A1|Right Shift|Right SHIFT key|{RShift}

A2|Left Control|Left CONTROL key|{LShift}

A3|Right Control|Right CONTROL key|{LCtrl}

A4|Left Menu|Left MENU key|{None}

A5|Right Menu|Right MENU key|{None}

Edited by mrRevoked
Don't bother, It's inside your monitor!------GUISetOnEvent should behave more like HotKeySet()
Link to comment
Share on other sites

Hi, Thank you and nice work :)

but it's missing some keys.. ;)

BA;
  BB =
  BC ,   <----Probably won't be able to add comma due to your using comma as a delimiter in WhatKey.dat 
  BD -
  BE .
  BF /
  C0 `
  DB [
  DC \
  DD ]

Cheers

Edit: Suggestion add $WS_VSCROLL style to the combo boxes.

eg:

$gcInput1 = GUICtrlCreateCombo("", 22, 49, 110, 21, $CBS_DROPDOWNLIST + $WS_VSCROLL)
$gcInput2 = GUICtrlCreateCombo("", 140, 49, 125, 21, $CBS_DROPDOWNLIST + $WS_VSCROLL)

Edit Again: I get an error if I hit my keyboard's END key while the gui is active, the gui crashes out .. o_0

C:\#AutoIt Projects Misc\Help PPL\whateveragain2.au3 (43) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.: 
GUICtrlSetData($gcResult, 'Description: '& $aResult[3] &@CRLF& 'Hotkey: '& $aResult[4]&@CRLF& 'Hex Value: '& $aResult[1] &@CRLF& 'Key: '& $aResult[2]) 
GUICtrlSetData($gcResult, 'Description: '& $aResult[3] &@CRLF& 'Hotkey: '& ^ ERROR
->12:49:52 AutoIT3.exe ended.rc:1

Edit Again And Again: The crash happens if I go any futher down the list then Left Shift when selecting from either combo box.

Edit umpteenth: Ok the array error is because of the WhatKey.dat , the last 5 line are missing a value on each line..

A1,Right Shift,Right SHIFT key,{RShift}

A2,Left Control,Left CONTROL key,{LShift}

A3,Right Control,Right CONTROL key,{LCtrl}

A4,Left Menu,Left MENU key,{None}

A5,Right Menu,Right MENU key,{None}

All good :P

Edited by smashly
Link to comment
Share on other sites

Only this script is working for me

#include <GUIConstants.au3>
#include <GUICombo.au3>

$hGUI = GUICreate("WhatKey? v.0.2e", 290, 265, -1, -1)
$cmFile = GUICtrlCreateMenu('&File')
$cmExit = GUICtrlCreateMenuitem('&Exit',$cmFile)
$cmHelp = GUICtrlCreateMenu('&Help')
$cmAbout = GUICtrlCreateMenuitem('&About',$cmHelp)
GUICtrlCreateGroup("", 10, 7, 268, 226)
GUICtrlCreateLabel("Value", 22, 25, 31, 17)
$gcInput1 = GUICtrlCreateCombo("", 22, 49, 110, 21, $CBS_DROPDOWNLIST + $WS_VSCROLL)
$gcInput2 = GUICtrlCreateCombo("", 140, 49, 125, 21, $CBS_DROPDOWNLIST + $WS_VSCROLL)
GUICtrlCreateLabel("Results", 22, 76, 39, 17)
$gcResult = GUICtrlCreateEdit("", 22, 99, 244, 116, BitOR($ES_WANTRETURN,$WS_VSCROLL,$ES_MULTILINE,$ES_READONLY), $WS_EX_CLIENTEDGE)
GUICtrlSetBkColor(-1,0xffffff)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)

Local $sSeparator = '|'
Local $sKeyFile = _WKs_Init(@ScriptDir & '\WhatKey.dat', $sSeparator)
Local $aInput[2], $aResult = ''

While 1
    $msg = GuiGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE, $cmExit
            Exit
        Case $cmAbout
            MsgBox(0, 'About WhatKey?', 'WhatKey? is an Autoit keyboard helper')
        Case Else
            If GUICtrlRead($gcInput1) <> $aInput[0] Then
                _GUICtrlComboSetCurSel($gcInput2, _GUICtrlComboGetCurSel($gcInput1))
            ElseIf GUICtrlRead($gcInput2) <> $aInput[1] Then
                _GUICtrlComboSetCurSel($gcInput1, _GUICtrlComboGetCurSel($gcInput2))
                $aInput[0] = ''
            EndIf
            If GUICtrlRead($gcInput1) <> $aInput[0] Then
                $aInput[0] = GUICtrlRead($gcInput1)
                $aInput[1] = GUICtrlRead($gcInput2)
                $aResult = _WKS_Value($sKeyFile, $aInput[0], $sSeparator)
                If UBound($aResult)-1 <> 4 Or Not IsArray($aResult) Or @error Then 
                    GUICtrlSetData($gcResult, 'An error has occured.')
                Else
                    GUICtrlSetData($gcResult, 'Description: '& $aResult[3] &@CRLF& 'Hotkey: '& $aResult[4]&@CRLF& _
                                              'Hex Value: '& $aResult[1] &@CRLF& 'Key: '& $aResult[2])
                EndIf
            EndIf
    EndSwitch
WEnd

Func _WKs_Init($sKeyDat, $sSeparator = "|")
    Local $aFileKeys = StringSplit(StringStripCR(FileRead($sKeyDat)),@LF) 
    If @Error Then Return Msgbox(0,'Error', $sKeyDat & ' could not be read properly, please make sure it exists.')
    Local $aArray, $aString[2] = ['','']
    For $x = 1 To UBound($aFileKeys) - 1
        $aArray = StringSplit($aFileKeys[$x],$sSeparator)
        If $x = 1 Then 
            Local $1st[2] = [$aArray[1],$aArray[1]]
        EndIf
        $aString[0] &= $aArray[1] & '|'
        $aString[1] &= $aArray[1] & '|'
    Next
    GUICtrlSetData($gcInput1, $aString[0], $1st[0])
    GUICtrlSetData($gcInput2, $aString[1], $1st[1])
    Return $aFileKeys
EndFunc

Func _WKS_Value($aKeys, $sValue,  $sASCII = 1, $sSeparator = "|")
    Local $aString
    If IsArray($aKeys) Then
        For $x = 1 To UBound($aKeys) - 1
            $aString = StringSplit($aKeys[$x],$sSeparator)
            If IsArray($aString) Then
                If $aString[1] = $sValue Then Return $aString
            EndIf
        Next
        Return SetError(2,0,"")
    EndIf
    Return SetError(1,0,"")
EndFunc

I change 2 times the 2 into 1

(At line 58 and 61)

Else I would get error:

Array variable has incorrect number of subscripts or subscript dimension range exceeded.

And Nice Work ^^

Its very usefull for me ^^

Edited by AlmarM

Minesweeper

A minesweeper game created in autoit, source available.

_Mouse_UDF

An UDF for registering functions to mouse events, made in pure autoit.

2D Hitbox Editor

A 2D hitbox editor for quick creation of 2D sphere and rectangle hitboxes.

Link to comment
Share on other sites

I get the following error

D:\AutoIT\whatkey.au3 (61) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

$aString[1] &= $aArray[2] & '|'

$aString[1] &= ^ ERROR


Time you enjoyed wasting is not wasted time ......T.S. Elliot
Suspense is worse than disappointment................Robert Burns
God help the man who won't help himself, because no-one else will...........My Grandmother

Link to comment
Share on other sites

I always get the same error when running your scripts:

`cannot declare a constant'

Why is this? I'm using beta too..

Look how old most of my scripts are that are out there, to many to keep up to date.

Only update if there is a big demand to.

SciTE for AutoItDirections for Submitting Standard UDFs

 

Don't argue with an idiot; people watching may not be able to tell the difference.

 

Link to comment
Share on other sites

I did too, make sure there's no empty lines in your Whatkey.dat file. I had an extra line break at the very end of the file and on a whim decided to try trimming it and voila.

@mrRevoked you should maybe have the script detect an empty line and just skip it?

I added "If @error Then ContinueLoop" on line 57, hope that helps.

Thanks :)

Don't bother, It's inside your monitor!------GUISetOnEvent should behave more like HotKeySet()
Link to comment
Share on other sites

A couple bugs for you mrRevoked.

1) Right bracket (DB) in Whatkey.dat has {]} for the Send key (should be {[}).

2) You're missing Apostrophe ('): DE|Apostrophe|Apostrophe key|{'}.

3) Prime (C0) in Whatkey.dat has {'} for Send key, should be {`}.

Otherwise looks pretty cool. I'm actually experimenting with your whatkey.dat right now, trying another approach for a HotKey dialog.

Edited by Saunders
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...