【问题标题】:AutoHotKey Key Combinations (remap) for key modifiers键修饰符的 AutoHotKey 组合键(重新映射)
【发布时间】:2013-06-01 17:48:12
【问题描述】:

我想将游戏中三个命令的 Ctrl 更改为空格键,但不是所有命令,因为我无法使用空格进行交流。常规命令是 Ctrl+q、Ctrl+w、Ctrl+e、Ctrl+r 和 Control+RButton(鼠标右键)。现在我正在使用 Space::Ctrl,但是我尝试了不同的解决方案,但没有结果。

[编辑/]
@MCL 好的。我查看了您发布的论坛主题,并尝试了下面的代码,该代码可以正常工作。它以我想要的方式发送键,但是每个快捷方式都会触发它后面的所有快捷方式。例如空格+e 触发空格+e、空格+r 和空格。

另外,空格键仍然不起作用。我后来添加了 Space::Space,我只能使用 Space+(q, w, e or r) 快捷键来获得文本空间。

SendMode Input
SetKeyDelay ,0,30

#IfWinActive ahk_class RiotWindowClass

Space & q::
            Send {Ctrl down}
            Sleep 30
            Send {q down}
            Sleep 30
            Send {q up}
            Sleep 30
            Send {Ctrl up}

Space & w::
            Send {Ctrl down}
            Sleep 30
            Send {w down}
            Sleep 30
            Send {w up}
            Sleep 30
            Send {Ctrl up}

Space & e::
            Send {Ctrl down}
            Sleep 30
            Send {e down}
            Sleep 30
            Send {e up}
            Sleep 30
            Send {Ctrl up}

Space & r::
            Send {Ctrl down}
            Sleep 30
            Send {r down}
            Sleep 30
            Send {r up}
            Sleep 30
            Send {Ctrl up}

Space & RButton::
            Send {Ctrl down}
            Sleep 30
            Send {RButton down}
            Sleep 30
            Send {RButton up}
            Sleep 30
            Send {Ctrl up}

Space::Space

#IfWinActive

[/编辑]

【问题讨论】:

  • 您确定 AHK 会发送您的密钥吗?否则,游戏可能是您的问题,阻止模拟击键(可能是有选择的)。此外,为了保持空间的原始功能,只需将SPACE::Send, {SPACE} 添加到您的代码中。有条不紊地找出问题: 1. AHK 是否注册了您的按键? 2. AHK一般会发你的快捷方式吗? (先在游戏外试试!) 3. 你的窗口是否接收到 AHK 模拟击键?
  • 感谢 MCL 抽出宝贵时间。 ||我刚才测试了以下内容: Space & q::Send Text - It sent it to Notepad++ || Space & q::Send !q - 我将 Ctrl+q 设置为 Launchy 的快捷方式,它成功打开了它。所以看起来发送命令在游戏中不起作用。但是, Space::Ctrl 有效。我用那个重映射按 Space+q,游戏将其检测为 Ctrl+q。
  • 只是一种预感,但请尝试使用以下指令:#InstallKeybdHook#UseHook 以不同的组合(只需将它们放在脚本的顶部)。另外,查看 AHK 是否注册了您的按键(最好将某些内容写入文件)。
  • 顺便说一句:在 AHK 论坛中查看 thread。看来,修改SetKeyDelay就可以搞定了。
  • @MCL 好的它尝试了您发布的线程上的建议并根据我得到的结果编辑了我的问题。

标签: keyboard-shortcuts autohotkey


【解决方案1】:

找到了。我需要添加退货。

#NoEnv
SendMode Input
#InstallKeybdHook
#UseHook

#IfWinActive ahk_class RiotWindowClass

Space & q::
            Send {Ctrl down}
            Sleep 30
            Send {q down}
            Sleep 30
            Send {q up}
            Sleep 30
            Send {Ctrl up}
            return

Space & w::
            Send {Ctrl down}
            Sleep 30
            Send {w down}
            Sleep 30
            Send {w up}
            Sleep 30
            Send {Ctrl up}
            return

Space & e::
            Send {Ctrl down}
            Sleep 30
            Send {e down}
            Sleep 30
            Send {e up}
            Sleep 30
            Send {Ctrl up}
            return

Space & r::
            Send {Ctrl down}
            Sleep 30
            Send {r down}
            Sleep 30
            Send {r up}
            Sleep 30
            Send {Ctrl up}
            return

Space & RButton::
            Send {Ctrl down}
            Sleep 30
            Send {RButton down}
            Sleep 30
            Send {RButton up}
            Sleep 30
            Send {Ctrl up}
            return

Space::
            Send {Space}
            return

#IfWinActive

【讨论】:

  • 好吧...只是注意到有一件事仍然不起作用。空格只能用作文本​​,不能用作将相机置于角色中心的快捷方式。 GRRRR
  • 首先,请不要向特定用户提供答案或问题。 SO上的每个人都可能对您的主题有所贡献。其次,我将使用 SetKeyDelay,而不是休眠,它一方面使您的代码更短且更具可读性,另一方面,也允许您修改 PressDuration。也许,玩 SetKeyDelay 可以解决你的 SPACE 问题。
  • 我尝试了 SetKeyDelay,但它不起作用。没有 ^q 或 {Control down}q{Control up} 或空间相机功能。
【解决方案2】:

关于:“空格只能用作文本​​,不能用作将相机置于角色中心的快捷方式。”

尝试使用SendMode Play 而不是SendMode Input

SendPlay's biggest advantage is its ability to "play back"
keystrokes and mouse clicks in a broader variety 
of games than the other modes. 

-- From the documentation for SendPlay.

如需进一步了解发送模式设置、权衡和能力,请查看the documentation for SendMode


关于:SetKeyDelay

SendMode Input 不会受到SetKeyDelay 的影响:

Note: SendInput ignores SetKeyDelay 
because the operating system does not support 
a delay in this mode.

-- From the documentation for SendInput


附加信息:

使用Custom Combinations (docs) 时需要注意的一点
(即使用非修饰键进行热键组合):

当您定义第一个Space & otherkey:: 时,Space 键成为“前缀键”,这意味着它失去了其本机功能。这需要您在示例中定义的最终热键:

Space:: 
     Send {Space}
return

注意事项:当Space发布时,此热键(恢复前缀键的功能)会触发。如果在Space downSpace up 之间按下任何其他键,它也不会触发。


您的脚本在 Notepad++ 中按预期工作(将发送行替换为 MsgBox 以进行调试)。

所以这可能是游戏获取 AHK 发送的空格键的问题。

尝试通过编写一个简单的脚本进行调试,该脚本除了使用不同的SendModes 将Space 发送到游戏之外什么都不做。

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 2020-11-05
    • 2019-05-04
    • 2011-06-14
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多