发送命令,AutoHotkey没有问题?

时间:2013-04-24 18:53:34

标签: autohotkey

所以我有这个名为AirMech的游戏。它不能将鼠标按钮识别为控件(还),所以我尝试使用AutoHotkey来规避它,直到它被实现。

#IfWinActive, AirMech
  XButton1::Send c

没用。所以我尝试了SendGameSendPlay以及其他一切,但也没有用。我用Google搜索,发现有些游戏根本无法识别任何发送命令。

在放弃之前,我只是尝试了一个简单的映射:

#IfWinActive, AirMech
  XButton1::c

它实际上有效。

是否预期比没有发送命令有效,但后者呢?如果我想触发其他动作(例如'c'加上一个MsgBox)会怎么样?

1 个答案:

答案 0 :(得分:1)

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

另外#IfWinActive有时并不能完全按照你期望的方式工作,特别是对于全屏游戏。因此,我通常在没有#IfWinActive的情况下测试我的AHK脚本,以确保它们正常工作。一旦它工作,我会介绍条件。


<强>更新

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

  

启动脚本时,每次重新映射都会转换为一对   热键。例如,包含 a :: 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如何中断按钮并将处理程序按钮分成两个单独的映射。游戏的游戏循环可能会轮询“keydown”状态的游戏键,如果AHK正在合成重复,则不能保持一致。重新映射a_down-&gt; b_down和a_up-&gt; b_up可能会使AHK更准确地模拟按住键的行为,这对于以特定方式测试键状态的程序(GetAsyncKeyState?)可能很重要。

映射中的星号表示“即使正在按下额外的修改器,也要触发热键。”