首页 > 解决方案 > 如何制作它以便您可以更改 GUI 中的热键?- 自动热键

问题描述

代码:

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 等)

如何制作它以便您可以更改 gui 中的热键?

标签: autohotkey

解决方案


您将使用该Hotkey命令在运行时创建热键。
要在 gui 中选择热键,最简单(但不是最好)的选项是hotkey control
它肯定是最简单的,对最终用户也很方便,但它不支持常规热键以外的任何内容。要获得更好的方法,您需要一个自定义方法。

是我通过 Google 搜索找到的第一个自定义项。自己没用过,应该是好东西。
您也可以使用的一个非常简单但功能强大的自定义控件只是一个Edit控件。如果您希望您的最终用户足够聪明,可以输入诸如!F1+#k、之类的东西,那么效果会非常好d & o


无论如何,我将在这里演示内置热键控件的用法。如果您想自己弄清楚,请立即停止阅读。

首先,创建 gui 并将变量和g-label关联到热键控件。
虽然,我将使用函数而不是标签,但我不喜欢编写遗留 AHK。

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

HotkeyChanged然后需要定义g-label ,我将使用一个函数而不是一个标签,如上所述。

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

而且在使用函数时,您必须担心范围,这就是global ChosenHotkey指定的原因。
在那里我告诉函数我将使用在其范围之外定义的变量。
如果范围是您还不知道的东西,并且还不想了解它们,您可以编写旧版 AHK 并使用标签并忘记所有这些。
要了解一般编程中的作用域,您可能可以从 Google 中找到一些不错的东西。
为了在 AHK 中专门了解它们,我在此处有一个关于它们的先前答案这里相关文档页面。

然后我得到 make 脚本用 更新其关联变量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
}

推荐阅读