AUTOHOTKEY:单击键后暂停脚本并在单击另外两个键后取消暂停的代码问题。同时做两件事

在游戏中以 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 - 关闭聊天和取消挂起脚本)

a9363001128honey 回答:AUTOHOTKEY:单击键后暂停脚本并在单击另外两个键后取消暂停的代码问题。同时做两件事

问题在于(已弃用的旧版)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,Off
#IfWinActive
,

我将代码更改为:

~t::
    Suspend On
    Loop
        if (GetKeyState("Enter","P") || GetKeyState("Escape","P"))
            break
    Suspend Off
return

为什么?因为在 @0x464e 代码中,当我手动挂起脚本并单击 enter / esc 时会出现问题,所以我需要单击 T 后它挂起,只有输入 / esc 才能解除挂起。当我在高于 enter / esc 的代码中手动挂起它时,不要取消挂起它。

本文链接:https://www.f2er.com/3783.html

大家都在问