使用自动热键捕获右键单击+左键单击;意外的行为

2024-03-15

我想捕获关键事件“按下鼠标右键,然后按下鼠标左键”。自动热键没有问题。然而,我仍然无法让鼠标右键单独工作。

1)这有效:

RButton & LButton::
    Send X
Return

按预期工作:

  • 如果我按下鼠标右键,然后按下鼠标左键,“X”将发送到活动窗口
  • Autohotkey 捕获右键事件:no当我单独按下鼠标右键时,会出现上下文菜单。这是预期的结果

2)这有效

~RButton & LButton::
    Send Y
Return

按预期工作:

  • 如果我按下鼠标右键,然后按下鼠标左键,“Y”将发送到活动窗口
  • Authotkey 未捕获右键单击事件:上下文菜单does当我单独按下鼠标右键或同时按下鼠标左键时出现。这是预期的结果

3)现在我想根据活动窗口做不同的事情。

这不起作用(小心:这将禁用每个应用程序中的右键单击)

#If WinActive("ahk_class MozillaWindowClass")

RButton & LButton::
    Send X
Return


#If !WinActive("ahk_class MozillaWindowClass")
~RButton & LButton::
    Send Y
Return

没有按预期工作:

  • 在 Firefox 中左右发送 X,在其他应用程序中左右发送 Y
  • 但是,右键单击在every应用

我在这里做错了什么?


edit:

目标是这样的:我想要一个右键+左键单击的全局热键RButton & LButton。在我测试过兼容性的特定应用程序中,我希望右键+左键单击来抑制发送右键单击,然后使用自动热键手动发送右键单击。但是,由于某些应用程序可能无法处理由自动热键发送的鼠标事件,因此在所有未经测试的应用程序中我想使用~RButton & LButton使用 ~ 传递右键单击事件


这是支持右键拖动的!

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:

  1. 另一个窗口处于活动状态
  2. RButton down is sent
  3. Firefox 未激活,因此处理第二个变体
  4. RButton被按下,尽管延迟可能是难以察觉的,以毫秒为单位,甚至无限)
  5. 火狐浏览器变得活跃
  6. (仍按住)
  7. RButton up已发送,即发送RButton根据文档。因为 Firefox 在活动窗口检查和何时之间的延迟中变得活跃RButton已发送,RButton被发送到 Firefox。

当 Firefox 和另一个窗口都可见,并且另一个窗口在单击时处于活动窗口时,就会发生这种情况。

我尝试通过添加额外的内容来修复此错误IfWinNotActive检查范围内RButton热键,但似乎不起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用自动热键捕获右键单击+左键单击;意外的行为 的相关文章

随机推荐

  • 如何用hadoop实现自连接/叉积?

    对成对的项目进行评估是常见的任务 示例 重复数据删除 协同过滤 相似项目等 这基本上是具有相同数据源的自连接或叉积 要进行自连接 您可以遵循 减少端连接 模式 映射器将连接 外键作为键发出 将记录作为值发出 因此 假设我们想要对以下数据的
  • 可以在 AS3 中保存 XML 文件

    var xml XML
  • VBA 公式内变量

    我有以下代码 ActiveCell FormulaR1C1 COUNTIF R 54 C 14 R 54 C 90 RC 4 我想用变量 total 替换 90 我尝试了这个但没有成功 Dim total as Integer total
  • 找不到程序集

    我将 ArrayList 序列化为二进制文件 以便通过 TCP IP 发送它 序列化文件是由服务器创建的 我希望能够使用我现在正在编写的客户端对其进行反序列化 但是 当客户端尝试反序列化时 它会抛出 SerializationExcepti
  • 如果没有响应则继续发送请求

    在循环中没有得到响应的情况下 如何继续获取网页 for el of NodeList const url el getAttribute href const res await fetch url if no response below
  • html2canvas 不从外部 css 文件获取 css 样式

    我正在使用 html2canvas 将包含 svg 对象 图像和 html 内容的 div 转换为图像 但它不会从外部 css 文件获取 css 样式 我已将这些 css 类 target 和 Circle 放入外部 css 文件中 有人请
  • 如何在 Jetpack Compose 中实现列表的“对齐中心”功能?

    在具有水平 LinearLayout 的 EpoxyRecyclerView 中 有一个 对齐中心 功能 其工作原理如下 如果我以良好的速度滚动列表 它会继续滚动 直到速度减慢并以项目位于中心为止 如果我缓慢滚动并抬起手指 那么下一个项目就
  • 材质UI下一个对话框文本字段下划线颜色

    如何使用辅助调色板颜色更改对话框内文本字段的下划线颜色 我无法做到这一点 因为文档非常混乱 假设您使用的是material ui next 您可以使用覆盖 in 创建Mui主题 import MuiThemeProvider createM
  • Rails 模型中的实例变量

    我想在 Rails 模型中初始化一个实例变量 该变量将保存一个数组 并且我想在模型中的其他方法中访问该变量 我试过这个 class Participant lt ActiveRecord Base possible statuses exi
  • 根据 Python pandas 中索引的补集挑选元素

    我有一个数据框 我从中选择两个子集 dfs df a and df b 例如在iris数据集 df a iris iris Name Iris setosa df b iris iris Name Iris virginica 获得所有元素
  • 有没有一种方法可以透明地对 SQLAlchemy 对象执行验证?

    有没有办法在设置属性之后 或设置属性时 但在提交会话之前对对象执行验证 例如 我有一个领域模型Device有一个mac财产 我想确保mac属性在添加到数据库或在数据库中更新之前包含有效且经过清理的 mac 值 看起来 Pythonic 方法
  • PHP在提交表单失败后保留表单信息

    你好 我正在 mvc 系统视图中构建一个表单 并且我希望保留所有插入的值 以防表单提交失败 如何做到这一点 我尝试过 字段示例
  • 点击鼠标绘制一个矩形

    可以用鼠标点击画一个矩形吗 我的代码到目前为止还不能工作 你能帮助我吗 private void panel1 MouseClick object sender MouseEventArgs e Graphics g this Create
  • 源码分析工具? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 C 和 C 的源代码分析和探索工具似乎非常缺乏 是否有任何工具可以用来收集有关 C 和 或 C 源文件的信息 cscope 完成了我需要的
  • 单元测试持久层 - Symfony

    我想在 Symfony2 中测试持久性 我想知道是否更好地模拟实体并提供给实体管理器 或者是否更好地模拟实体管理器并将实体传递给管理器 我的第一个选择是实体管理器抛出异常 而不是对象不是实体学说 如何在 PHPUNIT 中测试 symfon
  • 使用正则表达式或类似表达式更改 Chrome 中的当前 URL

    当在 Chrome 中输入已弃用的 URL 时 应根据正则表达式或类似表达式将其更改为更新的 URL 我想做以下事情 向系统输入一条规则 将 olddomain com 更改为 newdomain com 在 Chrome 中输入 oldd
  • 当插入符进入 contenteditable div 中的 span 元素时触发事件

    我有一个内容可编辑的 div 其跨度如下 div some span spanned span text div 我想知道是否有任何事件监听器可以附加到span元素本身可用于检测插入符是否在元素内部移动span元素 我并不是在寻找有听众的答
  • 在 Web 服务中使用 JSON 字节数组以及 application/x-www-form-urlencoded

    有3个问题 我正在使用 Java Restful Web 服务 请求是 HTTP POST 客户端如何发送 JSON 数据以及 application x www form urlencoded 的 MediaType 使用字节数组是否可以
  • 按 EditText 时的 TimePicker 对话框

    这个问题以前曾被问过 但当时的答案似乎不再适用于 Android Studio 或者我错过了一些东西 我希望当您按下编辑文本区域时显示一个 timePicker 对话框 以在 editText 中设置时间 然而 由于某种原因 普通键盘在按下
  • 使用自动热键捕获右键单击+左键单击;意外的行为

    我想捕获关键事件 按下鼠标右键 然后按下鼠标左键 自动热键没有问题 然而 我仍然无法让鼠标右键单独工作 1 这有效 RButton LButton Send X Return 按预期工作 如果我按下鼠标右键 然后按下鼠标左键 X 将发送到活