使用 AutoHotKey 重新映射按键

使用 AutoHotKey 重新映射按键

我最近从 GOG.com 购买了 Rayman 2。这款游戏比较老,因此没有提供重新映射按键的选项,我想让它们更接近我们今天习惯的按键。

这是来自手册的带有按键绑定的屏幕截图。

基本上,我希望使用 WSAD 进行正常移动,使用空格进行跳跃,使用鼠标左键单击进行射击。此外,我希望仅在 Rayman 窗口处于活动状态时重新映射按键。我创建了以下脚本,但它无法正常工作。

这是我第一次使用 AHK,所以我不知道该怎么做。如何正确配置脚本?

当这个脚本激活时会发生以下情况:

  • 无论 Rayman 是否打开,脚本都是活动的,更不用说窗口是否处于活动状态。(窗口名称可以是Rayman IIRayman2。)
  • W:向前移动并将镜头转向右侧
  • S:按预期工作
  • A:向左移动并跳跃
  • D:按预期工作
  • LButton:按预期工作
  • 空格:射击和跳跃

脚本本身:

IfWinActive, Rayman2
{
    w::up
    s::down
    a::left
    d::right
    space::a
    LButton::space
}

答案1

  1. 首先,您使用了错误的命令。使用#IfWinActive。这适用于整个脚本。您选择的命令检查脚本中的窗口是否处于活动状态。
  2. 然后,使用 WindowSpy 检查窗口的 ahk_class 是什么(如果窗口标题发生变化,这很有用)。WindowSpy 包含在 AutoHotkey 安装中。
  3. 最后,尝试不同的发送模式。有些细节有所不同。有关不同发送命令的更多信息,请参阅这里

您的代码将如下所示:

#IfWinActive, ahk_class xyz ; put your ahk_class instead of xyz
SendMode Play ; try all of the following: Input|Play|Event|InputThenPlay

    w::up
    s::down
    a::left
    d::right
    space::a
    LButton::space

资格:根据您使用的 Windows 版本,模拟按键可能有效,也可能无效。在 Windows 7 上有效的方法可能在 Windows 8 上不再有效。我也遇到过这种情况,但我还没有找到 AutoHotkey 中的替代方案。

您可能需要尝试不同的宏软件(AutoIt、PhraseExpress、Macro Express)。

答案2

看起来您已将一些键相互映射,这可能会导致循环调用。请尝试$在每个键前面放置一个。这样可以避免出现该问题。

例子:

$w::up

来源

关于您的IfWinActive问题,我建议改用ahk_exe。只需在任务管理器中查找进程名称,然后在所有热键前添加以下行即可。

#If WinActive("ahk_exe rayman.exe")  ; Rename exe to whatever it really is

来源

相关内容