发送命令,AutoHotkey没有错?

问题描述:

所以我有这个游戏,叫做AirMech。它不会将鼠标按钮识别为控件(尚未),所以我尝试使用AutoHotkey规避它,直到它实现为止。发送命令,AutoHotkey没有错?

#IfWinActive, AirMech 
    XButton1::Send c 

没有工作。所以我试过SendGameSendPlay和其他一切,都没有工作。我搜索了它,发现有些游戏根本不能识别任何发送命令。

放弃之前,我只是想一个简单的映射:

#IfWinActive, AirMech 
    XButton1::c 

它实际工作。

是否预期发送命令有效,但后者是否有效?如果我想触发其他操作(例如,'c'和一个MsgBox)?

+1

感谢您展示另一种避免游戏中发送问题的方法。这不会解决大多数问题,因为它们会在中间暂停一系列指令并且必须使用发送(播放)。 – 2013-04-25 05:03:19

AutoHotkey能够以各种不同的方式发送击键(SendRaw/SendInput/SendPlay/SendEvent)。我不太确定简单的 :: 映射的用途,但它必须是其中之一。我的猜测是SendRaw,SendInput,SendPlay或SendEvent中的一个将与密钥 :: 密钥一样工作。

另外#IfWinActive有时不能像你期望的那样工作,尤其是在全屏游戏中。所以我通常在没有#IfWinActive的情况下测试我的AHK脚本以确保它们正常工作。一旦它起作用,我会引入条件。


UPDATE

http://www.autohotkey.com/docs/misc/Remap.htm

当脚本被启动,每个重映射被转换为对 热键。例如,包含一个脚本:: B实际上包含 以下两个快捷键来代替:

*a:: 
SetKeyDelay -1 ; If the destination key is a mouse button, SetMouseDelay is used instead. 
Send {Blind}{b DownTemp} ; DownTemp is like Down except that other Send commands in the script won't assume "b" should stay down during their Send. 
return 

*a up:: 
SetKeyDelay -1 ; See note below for why press-duration is not specified with either of these SetKeyDelays. If the destination key is a mouse button, SetMouseDelay is used instead. 
Send {Blind}{b Up} 
return 

我的笔记:

我怀疑a::b是工作,但a::Send b的原因不是因为a :: b如何分解按钮,并将处理程序按钮分成两个单独的映射。游戏的gameloop可能会轮询“keydown”状态的游戏键,如果AHK正在合成重复节点,则不会始终保持这种状态。重新映射a_down-> b_down和a_up-> b_up可能使得AHK更精确地模拟按下按键的动作,这对于以特定方式测试按键状态的程序(GetAsyncKeyState?)可能很重要。

映射中的星号表示“即使多余的修饰符被按下,也会触发热键”。

+0

按照你的建议,我只是给了它所有五个发送命令的尝试,并没有任何'#IfWinActive',只是为了确保。无济于事:显然,没有一个与key :: key完全相同。也许是一个关键的延迟事件(编辑:根据上面的@RobertIlbrink,它发送暂停之间,所以必须解释为什么) – Jeto 2013-04-25 06:51:08

+0

请参阅http://www.autohotkey.com/docs/misc/Remap.htm - 我粘贴了一个有趣的从该页面引用我的答案。基本上a :: b被翻译成两个单独的详细映射。整个页面可能会是一个有趣的阅读。 – 2013-04-25 16:41:48