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

时间:2019-04-11 10:16:20

标签: autohotkey

我的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,但它什么也不做。然后,它发送被键入的“权限”。 (这是4次尝试中“最成功的一次”,但绝对没有达到预期的结果):

^!Right::
Send, ^!Right
return

尝试2 :仅与#1的不同之处在于SendPlay,而不是Send。热键再次正确绕过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的默认操作?

1 个答案:

答案 0 :(得分:1)

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

对于您的热键,您需要在单词“ right”周围加上花括号,否则它只会发送各个字符,就像实际键入它一样。另一个问题是,您需要在热键之前使用$,因为它是自引用的。也就是说,它正在发送相同的击键来激活它。

如果您没有机会检出帮助文件,我绝对会推荐它。 https://www.autohotkey.com/docs/AutoHotkey.htm

相关问题