如何强制Windows忽略AutoHotKey,而是将该热键直接传递给活动窗口?

问题描述 投票:1回答:1

我的cPanel有一个文本编辑器,它允许使用Ctrl-Alt-Up,Ctrl-Alt-Down,Ctrl-Alt-Right和Ctrl-Alt-Left来实现多光标功能。不幸的是,Windows有这些组合键的默认热键,可以旋转屏幕上的显示。当我尝试在文本编辑器中使用这些组合键时,Windows会在它们到达活动窗口之前劫持它们。

我首先搜索是否有任何相当简单的方法来关闭特定的Windows默认热键。我的搜索仅显示关闭所有热键的结果。然后我决定下载AutoHotKeys,看看我是否可以写一个脚本来实现我的目标。以下是一些例子;我会坚持使用Ctrl-Alt-Right来选择四个中的一个:

在所有4次尝试中,第一个代码块是相同的:

#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, 2      ;this and the next line should only perform the scripted
#IfWinActive Opera        ;hotkey if the active window's title contains 'Opera'

尝试1:热键正确绕过Windows默认显示旋转操作,并将键击发送到Opera中的文本编辑器。但是,文本编辑器在光标所在的位置输入字符串“ight”。文本编辑器中没有Ctrl-Alt-R热键,也不能是Windows默认热键。所以它将Ctrl-Alt-R发送给Opera,它什么都不做。然后它发送输出的“ight”。 (这是4次尝试中“最成功的”,但绝对没有达到预期的结果):

^!Right::
Send, ^!Right
return

尝试2:只与SendPlay而不是Send的#1不同。热键再次正确绕过Windows默认显示旋转操作。但是,文本编辑器似乎根本不做任何事情:

^!Right::
SendPlay, ^!Right
return

尝试3:回到Send,但现在围绕第二个“右”的花括号。现在热键甚至没有绕过Windows默认的显示旋转动作(这真的令人难以置信,因为我认为尝试#1的结果证明找到了活动的Opera窗口并且按键Ctrl-Alt-Right是正确的在第一行被^!Right读取。我很困惑,为什么在第二行添加花括号是否定了这些似乎已经发生过的事情):

^!Right::
Send, ^!{Right}
return

尝试4:只有#3与SendPlay而不是Send不同。热键再次正确绕过Windows默认显示旋转操作。但是,文本编辑器似乎根本不做任何事情:

^!Right::
SendPlay, ^!{Right}
return

总结一下:

----------|  Curly Braces    |       No Curly Braces       |
----------|------------------|-----------------------------|
Send      | Win Dflt Action  | types "ight" in text editor |
SendPlay  |   no action      |        no action            |

所以这是最后一个问题,根据这张表,在我看来,Send绝对是要走的路。如果(如步骤3似乎表明)大括号导致显示旋转,如何在没有Windows劫持的情况下将此击键发送到活动窗口?显然,当不使用花括号时,#IfWinActive Opera正常工作。也许还有另一个指令可以完全阻止或绕过Windows的默认操作?

autohotkey
1个回答
1
投票

如果您不希望具有屏幕旋转功能,可以在图形面板中禁用此功能。我相信它与英特尔图形应用程序有关。它可能是这样的,右键单击桌面,选择图形选项,选择热键,然后单击禁用。这只是猜测,因为我在我正在使用的计算机上没有这个,但我之前在其他人的计算机上遇到过它。

至于你的热键,你需要围绕单词“right”的花括号,或者它只是发送单个字符,就像实际键入它一样。另一个问题是你需要在热键前面使用$,因为它是自引用的;也就是说,它发送相同的击键来激活它。

如果您还没有机会查看帮助文件,我肯定会推荐它。 https://www.autohotkey.com/docs/AutoHotkey.htm

© www.soinside.com 2019 - 2024. All rights reserved.