所以我有这个名为AirMech的游戏。它不能将鼠标按钮识别为控件(还),所以我尝试使用AutoHotkey来规避它,直到它被实现。
#IfWinActive, AirMech
XButton1::Send c
没用。所以我尝试了SendGame
,SendPlay
以及其他一切,但也没有用。我用Google搜索,发现有些游戏根本无法识别任何发送命令。
在放弃之前,我只是尝试了一个简单的映射:
#IfWinActive, AirMech
XButton1::c
它实际上有效。
是否预期比没有发送命令有效,但后者呢?如果我想触发其他动作(例如'c'加上一个MsgBox)会怎么样?
答案 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?)可能很重要。
映射中的星号表示“即使正在按下额外的修改器,也要触发热键。”