首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可可全球热键消费键事件

可可全球热键消费键事件
EN

Stack Overflow用户
提问于 2016-11-21 08:14:42
回答 1查看 278关注 0票数 1

几个小时以来,我一直在尝试使用全局热键并“消费”按键事件,这样它就不会再被转发到按键事件最初来自的应用程序。

所以我想做的是:-用户在应用程序A前面按下快捷键,例如Cmd+F3 -我的应用程序(应用程序B)通过全局事件处理程序接收该快捷键,并将鼠标和键盘事件发送到应用程序A

把它想象成一个宏可能是最容易的。

我使用的是DDHotkey,它工作得很好。我遇到的问题是DDHotkey没有“使用”关键事件和修饰符。这意味着当我的应用程序开始发送鼠标和键盘事件时,仍然会按下实际全局快捷键中的Cmd键。

在我的例子中,这会导致错误的行为(例如,我以编程方式双击了一个文本字段,当按下Cmd时,它不会打开)。

因此,我想要做的是真正使用键事件和修改键,这样它们就不会被转发到应用程序A。或者,我会在将键事件发送到应用程序A之前“刷新”事件队列。

有什么方法可以很容易地做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-12 20:54:25

如果适用于您的用例,一种更可靠的方法可能是不通过触发鼠标事件和按键来编写UI脚本,而是使用可访问性API来触发更高级别的操作(如使用可访问性来告知按钮已被按下)。除非应用程序包含一些不幸的代码,否则不应该查看修改键。

从事件监视器告诉操作系统删除按键状态可能会导致很多问题:如果用户随后实际释放了物理按键,然后又有第二个keyUp进入,这将是令人困惑的。即使操作系统试图避免这种情况,它也只是在询问其他边缘情况的错误-如果用户在您的代码编写UI脚本时按下了修改键,该怎么办?

但是,如果您正在编写脚本的应用程序既不支持可访问性,也不支持AppleScript,也不支持任何其他更高级的自动化方法,那么您可以做的就是等待用户释放您的热键(即等待keyUp事件),然后才触发您的脚本操作。在此之前,可能需要使用performSelector:withObject:afterDelay:0.0来退出keyUp处理程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40711020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档