Как сделать так, чтобы можно было менять горячую клавишу в GUI? - AutoHotkey - PullRequest
0 голосов
/ 09 июля 2020

Код:

Gui, Add, Text,, ------------------------------------------Key Delay------------------------------------------
Gui, Add, Edit, w300 vKeyDelay, 100
Gui, Add, Text,, ------------------------------------------Key Input------------------------------------------
Gui, Add, Edit, R10 w300 vKeyPlayer
Gui, Add, Text,, ------------------------------------------Key Start------------------------------------------
Gui, Add, Edit, w300 vStartKey, F2
Gui, Show
F2::
!F2::
Gui, Submit, Nohide
SetKeyDelay, %KeyDelay%
Send, %KeyPlayer%
return
GuiClose:
ExitApp

Начальный ключ установлен на F2, я хочу сделать так, чтобы люди могли изменить его на что угодно, (F1, F2, F3, A, B, C, 1-10, et c)

Как сделать так, чтобы можно было менять горячую клавишу в gui?

1 Ответ

0 голосов
/ 09 июля 2020

Вы должны использовать команду Hotkey, чтобы создать горячую клавишу во время выполнения. И чтобы выбрать горячую клавишу в gui, самым простым (но не лучшим) вариантом будет управление горячими клавишами . Это, безусловно, самый простой способ, который также удобен для конечного пользователя, но он не поддерживает ничего, кроме обычных горячих клавиш. Для лучших подходов вам понадобится специальный.

Этот был первым нестандартным, найденным мной с помощью поиска Google. Сам не пользовался, но, может, и неплохо. Очень простой, но мощный пользовательский элемент, который вы также можете использовать, - это просто элемент управления Edit. Работает очень хорошо, если вы ожидаете, что ваши конечные пользователи будут достаточно умны, чтобы набирать такие вещи, как !F1, +#k, d & o и т. Д.

В любом случае, я продемонстрирую здесь использование встроенного управления горячими клавишами. Прекратите читать сейчас, если хотите разобраться самостоятельно.

Сначала создайте gui и свяжите переменную и g-label с элементом управления горячими клавишами. Хотя я собираюсь использовать функцию вместо метки , мне не нравится писать устаревшие AHK.

Gui, Add, Hotkey, % "x50 y25 w90 h30 vChosenHotkey gHotkeyChanged"
Gui, Show, % "w200 h100"
Return

Тогда g-метка HotkeyChanged должна быть определен, и я буду использовать функцию вместо метки, как сказано выше.

HotkeyChanged()
{
    global ChosenHotkey
    
    Gui, Submit, NoHide
    Hotkey, % ChosenHotkey, MyHotkey, On
}

И при использовании функции вам нужно беспокоиться об областях, поэтому указано global ChosenHotkey. Там я говорю функции, что буду использовать переменную, определенную вне ее области видимости. Если области действия - это то, о чем вы еще не знаете и еще не хотите о них узнавать, вы можете написать устаревший AHK, использовать ярлык и забыть обо всем этом. Чтобы узнать о масштабах программирования в целом, вы, вероятно, сможете найти что-нибудь хорошее в Google. И чтобы узнать о них конкретно в AHK, у меня есть предыдущий ответ о них здесь и здесь соответствующая страница документации.

Затем я получаю команду make the script update связанные с ним переменные с Gui, Submit, вы, кажется, уже знаете об этом. Затем я перехожу к команде Hotkey. Первый параметр принимает горячую клавишу, которая хранится в переменной ChosenHotkey. Второй параметр - это метка / имя функции или объект функции. Я буду использовать имя функции MyHotkey. И в третьем параметре On указывается, чтобы включить горячую клавишу и, возможно, заменить любую предыдущую любую предыдущую горячую клавишу, которая была на ее месте.

Затем необходимо определить функцию или метку MyHotkey:

MyHotkey()
{
    MsgBox, % "Hotkey pressed!"
}

И все. Если вы хотите сохранить ранее использованную горячую клавишу, а затем использовать ее снова при перезапуске скрипта, существует множество опций, все из которых в основном сводятся к идее сохранения горячей клавиши в какой-либо файл.

Вот полный сценарий:

Gui, Add, Hotkey, % "x50 y25 w90 h30 vChosenHotkey gHotkeyChanged"
Gui, Show, % "w200 h100"
return

HotkeyChanged()
{
    global ChosenHotkey
    
    Gui, Submit, NoHide
    Hotkey, % ChosenHotkey, MyHotkey, On
}

MyHotkey()
{
    MsgBox, % "Hotkey pressed!"
}

GuiClose()
{
    ExitApp
}
...