1

我想alt+e在 AutoCAD 中打开 caps 时重新映射。

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

我使用这样的脚本

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

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

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

谢谢。

4

2 回答 2

2

您需要$在热键的开头使用 a 来防止!eelse 块中的 the 触发的无限循环。您还需要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”才能正常工作。我建议使用 AHK 的窗口间谍找到 AutoCad 的 ahk_class,而不是使用标题。

如果仍然无法正常工作,则 AHK 的发送速度可能比 AutoCAD 想要接收的速度快。
可以在此处找到有关如何处理的信息。

于 2012-07-06T02:50:56.050 回答
1

尝试将您的 else 块更改为:

Send, {ALTDOWN}e{ALTUP}

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

于 2012-07-02T07:56:35.213 回答