如何在某些情况下重新映射密钥而不是在其他情况下使用autohotkey重新映射?

时间:2012-07-02 07:36:25

标签: autohotkey

我想在autocad中打开大写时重新映射 alt + e

capslock 未启用时, alt + e 应打开菜单编辑。

我使用这样的脚本

<!e::
if(GetKeyState( "CAPSLOCK", "T" ))
{
    SendInput erase{space}wp{space}
}
else
{
    Send !e
}

当我打开 capslock 时,重映射键就可以了。

当我关闭 capslock alt + e 时,菜单编辑打开,但立即关闭。

感谢。

2 个答案:

答案 0 :(得分:2)

您需要在热键开头设置$,以防止无效循环导致您的其他块中的!e触发。您还需要在热键的末尾添加Return,以防止脚本继续进入此热键下方的内容。

$!e::
if GetKeyState( "CapsLock", "T" )
    Sendinput, erase{space}wp{space}
else
    Sendinput, !e
Return

(仅当if / else块多于一行时才需要括号。)

除此之外,可能的问题是它是一个alt热键,也设置为发送alt 我说这是一个问题,因为如果你按住alt,它会激活菜单,
然后脚本发送alt,这将与之相冲突。
正如里卡多所说,编写脚本的理想方法是使用#IF命令(仅包含在AHK_L中)。

#If GetKeyState("CapsLock", "T") and WinActive("AutoCAD")

!e:: SendInput, erase{space}wp{space}

#If

请注意,您可以将WinActive()函数添加到#If命令的表达式中。 首先尝试它,并且还要意识到应用程序的标题需要始终完全“AutoCAD”才能工作。我建议找到AutoCad的ahk_class, 与AHK的窗口间谍,而不是使用标题。

如果它仍然不起作用,AHK发送的速度可能比AutoCAD想要的要快 有关如何处理的信息可以在here找到。

答案 1 :(得分:1)

尝试将您的其他块更改为:

Send, {ALTDOWN}e{ALTUP}

我不依赖这些符号在AutoHotKey中发送击键。