Jump to content

Changeable Hotkey with GUI


Dan_555
 Share

Recommended Posts

Hi, 

here is a configurable HotKey Gui script, which i wrote for my current Project:

#include <Array.au3>
#include <ComboConstants.au3>
#include <GuiComboBox.au3>
#include <GUIConstantsEx.au3>
#include <String.au3>
#include <WindowsConstants.au3>
#include <Array.au3>


Global $snip_inifile = @ScriptDir & "\" & "hotkeygui.ini"
;If $HKSTRING is changed, make sure to adjust the $z number in the SetHotkeyKeys function.
Local $HKSTRING = "[;][#;Win][!;Alt][+;Shift][^;Ctrl][0;0][1;1][2;2][3;3][4;4][5;5][6;6][7;7][8;8][9;9][a;a][b;b][c;c][d;d][e;e][f;f][g;g][h;h][i;i][j;j][k;k][l;l][m;m][n;n][o;o][p;p][q;q][r;r][s;s][t;t][u;u][v;v][w;w][x;x][y;y][z;z][{PAUSE};Pause][{BREAK};Break][{HOME};Home/Pos1][{END};END][{PGUP};Page UP][{PGDN};Page Down][{F1};F1][{F2};F2][{F3};F3][{F4};F4][{F5};F5][{F6};F6][{F7};F7][{F8};F8][{F9};F9][{F10};F10][{F11};F11][{F12};F12][{SPACE};Space]"
Local $HKT = _StringBetween($HKSTRING, "[", "]")
Global $HK, $HKS
Global $h_HotkeyTestInput
Dim $HK[0][2]                            ;Hotkey keys+names
Dim $HKS[6]                              ;Hotkey (ini)settings 0-3 combo boxes, 4 = Redirect the hotkey test to the input box, 5=Current Hotkey Set.

For $x = 0 To UBound($HKT) - 1            ;Make an array including the text from HKSTRING
    _ArrayAdd($HK, $HKT[$x], 0, ";")
Next

$HKT = ""
$HKSTRING = ""

SetHotkeyKeys(0)                    ;Set the initial hotkey
SetHotkeyKeys(1)                    ;Open the config-gui

while 1                 ;Test the hotkey. Output is in the console. Exit through traymenue.
    sleep (10)
WEnd

Func SetHotkeyKeys($showgui = 0)
    ;$showgui 0 = Set the saved hotkeys, 1 = Show gui to change the settings
    Local $a, $b, $c, $z
    $z=4                                                ;$z of the text from $HK will go in to c1-c3, the rest goes to c4
    $HKS[0] = IniRead($snip_inifile, "hotkey", "0", "4")
    $HKS[1] = IniRead($snip_inifile, "hotkey", "1", "0")
    $HKS[2] = IniRead($snip_inifile, "hotkey", "2", "0")
    $HKS[3] = IniRead($snip_inifile, "hotkey", "3", "12")
    $HKS[4] = 0
    $HKS[5] = $HK[$HKS[0]][0] & $HK[$HKS[1]][0] & $HK[$HKS[2]][0] & $HK[$HKS[3] + $z + 1][0]
    If $showgui = 1 Then
        $HKS[4] = 1
        #Region ### START Koda GUI section ### Form=
        $Form1 = GUICreate("Hotkey Config", 317, 79, -1, -1, $WS_POPUP + $WS_CAPTION)
        $C1 = GUICtrlCreateCombo("", 4, 50, 72, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
        $C2 = GUICtrlCreateCombo("", 82, 50, 72, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
        $C3 = GUICtrlCreateCombo("", 161, 50, 72, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
        $C4 = GUICtrlCreateCombo("", 239, 50, 72, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
        $Label1 = GUICtrlCreateLabel("Please set a hotkey to use. Note: Not all combos may work.", 4, 30, 300, 17)
        $Button1 = GUICtrlCreateButton("Set + Save", 4, 4, 70, 23)
        $h_HotkeyTestInput = GUICtrlCreateInput("Test", 82, 5, 150, 21)
        $Button2 = GUICtrlCreateButton("Exit", 239, 5, 72, 23)
        _GUICtrlComboBox_SetMinVisible($C4, 60)
        GUISetState(@SW_SHOW)
        #EndRegion ### END Koda GUI section ###

        For $x = 0 To UBound($HK) - 1
            If $x <= $z Then
                _GUICtrlComboBox_AddString($C1, $HK[$x][1])
                _GUICtrlComboBox_AddString($C2, $HK[$x][1])
                _GUICtrlComboBox_AddString($C3, $HK[$x][1])
            Else
                _GUICtrlComboBox_AddString($C4, $HK[$x][1])
            EndIf
        Next
        _GUICtrlComboBox_SetCurSel($C1, $HKS[0])
        _GUICtrlComboBox_SetCurSel($C2, $HKS[1])
        _GUICtrlComboBox_SetCurSel($C3, $HKS[2])
        _GUICtrlComboBox_SetCurSel($C4, $HKS[3])

        While 1
            $nMsg = GUIGetMsg()
            Switch $nMsg
                Case $GUI_EVENT_CLOSE, $Button2
                    GUIDelete($Form1)
                    ExitLoop
                Case $Button1
                    $HKS[0] = _GUICtrlComboBox_GetCurSel($C1)       ;Read the combo - boxes
                    $HKS[1] = _GUICtrlComboBox_GetCurSel($C2)
                    $HKS[2] = _GUICtrlComboBox_GetCurSel($C3)
                    $HKS[3] = _GUICtrlComboBox_GetCurSel($C4)
                    HotKeySet($HKS[5])                              ;Clear the Old Hotkey
                    $HKS[5] = $HK[$HKS[0]][0] & $HK[$HKS[1]][0] & $HK[$HKS[2]][0] & $HK[$HKS[3] + $z +1][0]     ;Assemble the hotkey string, use $z+1 !
                    If HotKeySet($HKS[5], "DoHotkey") = 0 Then MsgBox(0, "Hotkey", "Err: Could not set. " & $HKS[5])        ;Set the hotkey or display a message
                    IniWrite($snip_inifile, "hotkey", "0", $HKS[0])                 ;Save the hotkey to the ini file
                    IniWrite($snip_inifile, "hotkey", "1", $HKS[1])
                    IniWrite($snip_inifile, "hotkey", "2", $HKS[2])
                    IniWrite($snip_inifile, "hotkey", "3", $HKS[3])
            EndSwitch
        WEnd
    EndIf

    If $HKS[4] = 0 Then                     ;Function was called with 0 
        $HKS[5] = $HK[$HKS[0]][0] & $HK[$HKS[1]][0] & $HK[$HKS[2]][0] & $HK[$HKS[3] + $z + 1][0]
        If HotKeySet($HKS[5], "DoHotkey") = 0 Then MsgBox(0, "Hotkey", "Err: Could not set. " & $HKS[5])
    Else
        $HKS[4] = 0
    EndIf
EndFunc   ;==>SetHotkeyKeys

Func DoHotkey()

    If $HKS[4] = 0 Then                 ;Main function
        ConsoleWrite("PRESS" & @CRLF)
    Else                                ;Gui test code:
        GUICtrlSetData($h_HotkeyTestInput, "Hotkey ! " & @hour & ":" & @min & ":" & @SEC)
    EndIf
EndFunc   ;==>DisplayActiveProcess

This script uses only 1 hotkey, and saves it  into an ini file.

To load and use the saved Hotkey from the ini use: SetHotkeyKeys(0) 

And to open the configuration window, use SetHotkeyKeys(1). 

Have fun.

Edited by Dan_555
Changed a variable to be global.

Some of my script sourcecode

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

×
×
  • Create New...