AUTOHOTKEY:单击键后暂停脚本并在单击 2 个其他键后取消暂停脚本的代码有问题。同时做两件事
AUTOHOTKEY: Problem with code which suspend script after clicking key and unsuspend it after clicking 2 another keys. Doing 2 things at the same time
在游戏中聊天以 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 次,为什么?第一次点击暂停脚本,第二次点击 运行s 聊天。我希望在点击 1 次 t 键后聊天将 运行 并且脚本将暂停。我想使用 enter 和 esc,同时执行 2 个功能(enter - 取消挂起脚本并在聊天中发送消息,esc - 关闭聊天并取消挂起脚本)
问题出在(已弃用的遗留)GetKeyState 命令的使用上,但我必须说,整个解决方案可以实施得更好。
命令的输出值不包含键名,它包含 D
表示向下,或 U
表示向上,如 documentation 中所述。而且你还需要 "quote"
你的字符串。
而您的 T 键在第一次按下时不起作用的问题,当然是因为您有一个热键可以捕获 T 键的按下。
要在热键运行时不使用 T 键,您需要使用 ~
修饰符(docs).
但无论如何,我认为更好的实现方式是简单地按下按键 suspends/unsuspends。
像这样:
~t::Suspend, On
~Enter::
~Esc::Suspend, Off
作为奖励:
#IfWinActive
(docs) 的用法可能是可取的,这样热键仅在您的游戏处于活动状态时才有效。
#IfWinActive, ahk_exe ExeOfMyGame.exe
~t::Suspend, On
~Enter::
~Esc::Suspend, Off
#IfWinActive
我把代码改成这样:
~t::
Suspend On
Loop
if (GetKeyState("Enter", "P") || GetKeyState("Escape", "P"))
break
Suspend Off
return
为什么?因为在 @0x464e 中,当我手动暂停脚本并单击 enter / esc 取消暂停时,代码就是那个问题,我需要在单击 T 后暂停它,只有 enter / esc 才能取消暂停它。当我在上面的代码中手动挂起它时,请输入/退出不要取消挂起它。
在游戏中聊天以 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 次,为什么?第一次点击暂停脚本,第二次点击 运行s 聊天。我希望在点击 1 次 t 键后聊天将 运行 并且脚本将暂停。我想使用 enter 和 esc,同时执行 2 个功能(enter - 取消挂起脚本并在聊天中发送消息,esc - 关闭聊天并取消挂起脚本)
问题出在(已弃用的遗留)GetKeyState 命令的使用上,但我必须说,整个解决方案可以实施得更好。
命令的输出值不包含键名,它包含 D
表示向下,或 U
表示向上,如 documentation 中所述。而且你还需要 "quote"
你的字符串。
而您的 T 键在第一次按下时不起作用的问题,当然是因为您有一个热键可以捕获 T 键的按下。
要在热键运行时不使用 T 键,您需要使用 ~
修饰符(docs).
但无论如何,我认为更好的实现方式是简单地按下按键 suspends/unsuspends。
像这样:
~t::Suspend, On
~Enter::
~Esc::Suspend, Off
作为奖励:
#IfWinActive
(docs) 的用法可能是可取的,这样热键仅在您的游戏处于活动状态时才有效。
#IfWinActive, ahk_exe ExeOfMyGame.exe
~t::Suspend, On
~Enter::
~Esc::Suspend, Off
#IfWinActive
我把代码改成这样:
~t::
Suspend On
Loop
if (GetKeyState("Enter", "P") || GetKeyState("Escape", "P"))
break
Suspend Off
return
为什么?因为在 @0x464e 中,当我手动暂停脚本并单击 enter / esc 取消暂停时,代码就是那个问题,我需要在单击 T 后暂停它,只有 enter / esc 才能取消暂停它。当我在上面的代码中手动挂起它时,请输入/退出不要取消挂起它。