在游戏中以 t 键开始聊天,我希望在按下键盘上的 t 后,我的脚本将暂停,我可以正常在聊天中书写,但如果我按 Enter 或 esc,我的脚本将取消暂停(esc - 关闭聊天,输入 - 在聊天中发送消息)。
我对这段代码有疑问:
t::
Suspend On
Loop
{
GetKeyState, state, Enter, P
GetKeyState, state2, Escape, P
if (state = Enter){
Suspend Off
break
}
else if (state2 = Escape){
Suspend Off
break
}
}
return
另一个问题是 t 键哪个有效,但我必须点击它 2 次,为什么?第一次点击暂停脚本,第二次点击运行聊天。我想在单击 1 次后 t key chat 将运行并且脚本将挂起。我想用 enter 和 esc 一样,同时执行 2 个函数(输入 - 取消挂起脚本并在聊天中发送消息,esc - 关闭聊天和取消挂起脚本)
答案 0 :(得分:0)
问题在于(已弃用的旧版)GetKeyState 命令的使用,但我必须说,整个解决方案可以更好地实现。
命令的输出值不包含键名,它包含 D
表示向下,或 U
表示向上,如 documentation 中所述。而且您还需要"quote"
您的字符串。
您的 T 键在第一次按下时不起作用的问题,当然是因为您有一个热键可以捕获 T 键的按下。
为了在热键运行时不消耗 T 键按下,您需要使用 ~
修饰符(docs)。
但无论如何,我认为更好的实现方式是按下按键简单地挂起/取消挂起。
像这样:
~t::Suspend, On
~Enter::
~Esc::Suspend, Off
作为奖励:
可能需要使用 #IfWinActive
(docs),因此热键仅在您的游戏处于活动状态时有效。
#IfWinActive, ahk_exe ExeOfMyGame.exe
~t::Suspend, On
~Enter::
~Esc::Suspend, Off
#IfWinActive
答案 1 :(得分:0)
我将代码更改为:
~t::
Suspend On
Loop
if (GetKeyState("Enter", "P") || GetKeyState("Escape", "P"))
break
Suspend Off
return
为什么?因为在 @0x464e 代码中,当我手动挂起脚本并单击 enter / esc 时会出现问题,所以我需要单击 T 后它挂起,只有输入 / esc 才能解除挂起。当我在高于 enter / esc 的代码中手动挂起它时,不要取消挂起它。