问题标签 [cgeventtap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
359 浏览

macos - 用于后台应用程序的 CGAssociateMouseAndMouseCursorPosition

我有一个在后台解释触控板事件的应用程序(适用于所有应用程序)。

我希望能够在某些时候解除鼠标与光标的关联。CGAssociateMouseAndMouseCursorPosition 仅在我的应用程序位于前台时有效。

有没有办法做到这一点?

0 投票
0 回答
351 浏览

macos - 区分魔术鼠标/触控板滚动事件

在 Event Tap 中,我需要区分来自魔术鼠标的滚动事件和来自触控板的滚动事件。

有没有人可以解决这个问题?有没有办法从 CGEvent 中获取生成设备的产品 ID?IOkit 可以在这里帮助我吗?

0 投票
1 回答
1010 浏览

macos - 在应用程序运行时停止拦截键盘输入 - CGEventTap

使用 CGEventTap 停止观看键盘事件点击的正确方法是什么?

我正在构建一个简单的后台应用程序来转换特定键的输出。感谢CGEventTap 上的这篇出色的帖子,我已经能够启用密钥转换。不幸的是,我似乎无法阻止它而不是杀死该应用程序。

当用户切换复选框以打开或关闭功能时,将调用以下方法。切换 ON 立即发生。切换关闭可能需要一分钟或更长时间才能生效。我通过日志看到“已禁用。停止转换水龙头。” 被检测到。但关键转换仍在继续。我不明白为什么。

感谢您的任何建议。我是新构建 Mac OS X 应用程序,所以如果我做一些无知的事情,请原谅我。

0 投票
2 回答
1262 浏览

macos - 为什么 Key Down 事件掩码不起作用,但全部掩码起作用?

我正在开发一个基本的击键转换器应用程序。转换适用于以下内容:

正如您所料,kCGEventMaskForAllEvents除了键盘之外,任何鼠标移动或单击都会不断触发,我怀疑会占用系统资源。我尝试替换CGEventMaskBit(kCGEventKeyDown),我可以从关于事件类型的 Quartz Event 文档中最好地看出这是我想要的,并且会清除鼠标移动和点击。不幸的是,使用它似乎只是吃掉击键,而不是转换它们。

我究竟做错了什么?

以下工作,但我仍然不明白为什么CGEventMaskBit(kCGEventKeyUp)它本身不是正确的实现。

0 投票
1 回答
543 浏览

objective-c - 使用 CGEventTap 禁用键盘

我发现了这个:以 编程方式禁用鼠标和键盘

但是,如果我将代码复制到一个新项目并尝试构建它,它会说构建失败。但是它自己的代码没有错误。

现在我的问题是我如何使用事件点击来做到这一点(禁用键盘)

感谢您的任何建议。我是新开发的 Mac OS X 应用程序,所以如果我问了一些愚蠢的问题,请原谅我。

0 投票
2 回答
1595 浏览

macos - NSEvent`subtype`相当于CGEvent?

NSEvent有一个获取事件的方法subtype

获取自定义事件信息
——data1
——data2——
子类型

是否可以subtype在不先将其转换为 NSEvent 的情况下从 CGEvent 访问它?

CGEvent文档提到了鼠标事件子类型,似乎与来自IOLLEvent.h. 但是,我对查找系统定义的 CGEvents 的子类型特别感兴趣。

这些将是NX_SUBTYPE_AUX_CONTROL_BUTTONS下面的 等或 CG 替代品。

0 投票
1 回答
621 浏览

c - OS X 拦截键盘事件到密码表单元素

我目前正在创建 ac 程序,该程序计算我在一天中按下的所有键,并按数量对键类型进行排序,这样我就可以知道我最常按哪些键。这更像是一个附带项目,但我对我的程序似乎无法拦截密码字段的任何输入这一事实感到恼火。我想这是一件好事,但我一直在花费数小时查看文档并试图弄清楚如何做到这一点。我不是在尝试创建任何类型的恶意软件。有没有解决的办法?我的程序以 root 身份运行。我正在使用ApplicationServices框架和CGEventRef功能CGEventTapCreate。我应该使用不同的框架或结构吗?kCGHIDEventTap另外, , kCGSessionEventTap, 和之间有区别吗kCGAnnotatedSessionEventTap? 我已经尝试过使用它们中的每一个,但它似乎对我的程序没有任何影响。

我在 OS X 10.9 上运行它

更新 显然我也无法捕捉到终端的击键,这是我大部分时间花在笔记本电脑上的地方。这是个问题。

0 投票
1 回答
434 浏览

objective-c - 使用 CGEventTap (objective-c) 从点击监听器获取窗口 id

我正在尝试收听用户所做的所有鼠标点击。我需要知道用户点击了哪个窗口(大概是通过它的 CGWindowID)。我正在通过 CGEventTap 收听所有点击,但现在我不知道如何获取被点击的窗口。你知道一些从 CGEventRef 对象中检索窗口 id 的方法吗?

另外,我知道我可以通过获取 [事件 windowNumber] 使用 [NSEvent addGlobalMonitorForEventsMatchingMask] 来获取窗口 ID,但我不能使用此侦听器,因为由于某种原因,设置侦听器后它会阻止所有输入我自己的窗户。也许有人也知道,这是从哪里来的?

谢谢!

佩德罗

0 投票
1 回答
1532 浏览

objective-c - 可可事件水龙头

我正在尝试在 OS X 上使用 Quartz 事件服务,特别是事件点击来捕获由连接到剥离键盘 PCB 的无源红外传感器生成的模拟按键。从理论上讲,通过事件点击,我可以选择吞下并忽略按键,只需使用键盘输入来“唤醒”计算机。我还可以使用事件点击(仅连接一个“键”,因此运动检测器始终发送“0”)将输入修改为任意键或组合键,进而调用主机上的任意功能. 更复杂的是,最终主机是一台旧的 G4 Powerbook (PPC),它不能真正运行 OS X 10.4 以外的任何东西,而我目前的开发机器是一台更新的基于 Intel 的 iMac,运行 10.9 并使用 Xcode 5.1。 1.

我从这里的答案中找到了以下代码,而且看起来会很完美。如果我在 Cocoa 中创建一个终端应用程序,我基本上可以按原样使用代码。我还尝试创建一个基于窗口的 Cocoa 应用程序,以防有必要将应用程序添加到可在安全/隐私首选项下“控制”计算机的辅助功能应用程序列表(在小牛队中不推荐使用启用辅助设备访问)。两种应用程序类型都不能完全正常工作。我能做到的最好的事情是让程序识别修饰键(命令、选项、shift、ctl等)的按键,但是我无法从“常规”键盘键的按键中得到任何响应,而且我似乎无法制定实际更改捕获的关键事件。此外,它似乎是鼠标事件,特别是鼠标点击,

这是我对原始代码稍作修改的版本,它适用于尝试符合 Xcode 5 约定。如您所见,繁重的工作在 applicationDidFinishLaunching 方法中,而不是原始方法中的 main() 。显然,我必须在 AppDelegate.h 文件中创建一个方法声明,这也不是原始代码的一部分。

在这一点上,在我尝试向后移植到 10.4 兼容性之前,我只是想在 10.9 上进行一些工作作为概念证明。对不起,很长的帖子。第一次在这里寻求帮助,只是想彻底。在此先感谢您的所有回复!

0 投票
1 回答
385 浏览

macos - 如何在 OSX 中拦截来自特定窗口的事件

我想要以下工作流程:

  • 用户按下热键或状态栏菜单按钮
  • 用户点击一个窗口
  • 窗口现在在我的应用程序中“注册”
  • 应用拦截所有注册窗口的鼠标事件

我读过很多关于 CGEvents、CGEventTaps 和 NSEvents 的文章。我可以使用 CGEvents 和 CGEventTaps 拦截全局事件并发布新事件,但是 NSEvent 中没有像 windowNumber 这样的窗口信息,只有 PSD(我不确定如何使用这些),所以我无法过滤掉来自非注册的窗口。另一方面,NSEvent 不允许我拦截全局事件,只能通过 localMonitor 拦截本地事件。

我怎样才能实现所需的功能?