这是支持右键拖动的!
Hotkey, LButton, off
#IfWinActive ahk_class MozillaWindowClass
RButton & LButton::
Send X
Return
RButton::return
#IfWinNotActive ahk_class MozillaWindowClass
~$RButton::
Hotkey, LButton, on
while GetKeyState("RButton", "P") {
continue
}
Hotkey, LButton, off
Return
LButton::Send Y
Return
它处理RButton
手动。什么时候RButton
被按下时,它使LButton
热键并等待RButton
在停用之前释放。这RButton
热键用途~
,这会正常传递点击。
LButton
在开始时被顶部的线禁用。
另一种方法是发送{RButton Down}
在热键的开头和{RButton Up}
在最后。
为了响应您的编辑,唯一拒绝 Autohotkey 发送事件的程序应该是那些依赖于低级挂钩的程序...底部方法的真正问题是它只发送一次单击,而不处理按住按钮。此方法以及分别向下和向上发送的方法都应该可以正确执行此操作。
本答案底部描述的活动窗口的错误仍然存在,但这是一个问题#IfWin[Not]Active
.
老东西
See the (强调我的):
您可以通过在两个键之间使用“ & ”来定义两个键(操纵杆按钮除外)的自定义组合。在下面的示例中,您可以按住 Numpad0 然后按第二个键来触发热键:
Numpad0 & Numpad1::MsgBox You pressed Numpad1 while holding down Numpad0.
Numpad0 & Numpad2::Run Notepad
上例中,Numpad0 成为前缀键;但这也会导致Numpad0在被自己按下时失去其原始/本机功能。为了避免这种情况,脚本可以配置 Numpad0 来执行新操作,例如以下操作之一:
Numpad0::WinMaximize A ; Maximize the active/foreground window.
Numpad0::Send {Numpad0} ; Make the release of Numpad0 produce a Numpad0 keystroke. See comment below.
上述热键之一的存在会导致释放 Numpad0 来执行指示的操作,但前提是您在按住 Numpad0 的同时没有按任何其他键。
因此,按照该示例:
#If WinActive("ahk_class MozillaWindowClass")
RButton & LButton::
Send X
Return
RButton::return
#If !WinActive("ahk_class MozillaWindowClass")
RButton & LButton::
Send Y
Return
RButton::Send {RButton}
Note RButton
需要一个不执行任何操作的变体WinActive
,至少经过我的测试(见下文):RButton::return
由于我使用的是 Autohotkey 标准,而不是 Autohotkey_L,所以我没有#If
以上未经测试。下面我did测试一下,果然有效。
#IfWinActive ahk_class MozillaWindowClass
RButton & LButton::
Send X
Return
RButton::return
#IfWinNotActive ahk_class MozillaWindowClass
RButton & LButton::
Send Y
Return
RButton::Send {RButton}
我注意到的一个有趣的错误是第二个(NotActive)变体偶尔适用于 Firefox:
- 另一个窗口处于活动状态
-
RButton
down is sent
- Firefox 未激活,因此处理第二个变体
- (
RButton
被按下,尽管延迟可能是难以察觉的,以毫秒为单位,甚至无限)
- 火狐浏览器变得活跃
- (仍按住)
-
RButton
up已发送,即发送RButton
根据文档。因为 Firefox 在活动窗口检查和何时之间的延迟中变得活跃RButton
已发送,RButton
被发送到 Firefox。
当 Firefox 和另一个窗口都可见,并且另一个窗口在单击时处于活动窗口时,就会发生这种情况。
我尝试通过添加额外的内容来修复此错误IfWinNotActive
检查范围内RButton
热键,但似乎不起作用。