问题标签 [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 投票
2 回答
1769 浏览

objective-c - CGEvent NSKeyDown 仅在应用程序位于最前面时才有效?

我正在尝试自动化一些任务(没有 AppleScript 支持),所以我必须使用 CGEvents 并发布这些事件。鼠标点击工作正常,但 NSKeyDown(回车)只有在我点击 Dock 中的应用程序时才有效(这使它成为最前面的应用程序).​​.....这是我到目前为止的代码:

我在循环中有 posteventtopsn 的原因是出于测试目的(我只需要它发送一次)。当程序处于循环中时,如果我将我的应用程序激活到最前面,那么该事件可以正常工作。

我究竟做错了什么?如果它在后台有什么方法可以工作吗?谢谢。

0 投票
1 回答
1276 浏览

objective-c - 将 CGEvents 击键发送到后台应用程序

我正在尝试将输入键发送到这样的后台应用程序:

它不起作用,我认为这是因为该应用程序必须是最前面的应用程序才能接收击键?我对吗?如果是这样,无论如何我可以在不先激活应用程序的情况下发送此事件吗?如果没有,那我做错了什么?谢谢。

0 投票
1 回答
1860 浏览

macos - CGEventCreateKeyboardEvent 和 CGEventTapLocation

我很难处理自定义键盘事件。我希望能够发送带/不带 kCGEventFlagMask 的任何键,例如 command、alt、ctrl、shift ......

例如,我想发送当前最前面的应用程序,假设它是 TextEdit,组合键 cmd+t,它应该显示字体窗口。

但是目前只有 t 被添加到 TextEdit 的当前文档中。我尝试使用自定义设置 CGEventFlags 发布事件,并在 t 事件周围为 cmd 生成 keyDown 和 keyUp 事件。当我使用 CGEventFlags 集时,免费应用程序 Key Codes 向我显示 cmd+t 已按下,但此组合键未传递给 TextEdit,只有单个 t...

这是我的代码:

}

我也很难理解 CGEventTapLocation 的含义。我不知道哪个事件点击最适合我的任务。Quartz Event Reference 中的描述并没有启发我:

我看过很多关于该主题的帖子,但没有一个能帮助我解决我的问题......感谢您的帮助!

0 投票
1 回答
164 浏览

objective-c - 在事件点击中检测内部或外部设备

我在 Mac 应用程序中使用事件点击来检测按键和鼠标移动。对于下一步,我想区分内部键盘/触控板和外部键盘/鼠标/触控板。有谁知道如何做到这一点?

0 投票
1 回答
208 浏览

cocoa - 在 NPAPI 插件中处理 CGEventTaps

我正在尝试创建一个 NPAPI 插件来收听 macbook 上的媒体密钥并将其传递给 javascript 以控制诸如潘多拉或 soundcloud 之类的东西。我正在使用 Spotify 的 SPMediaKeyTap 库,它只是包装了在单独线程上运行的 CGEventTap。

我的问题是我使用 npn_invoke 来回调 javascript。这正常工作,但是当它从 CGEventTap 回调触发时,它会使插件崩溃。我意识到这需要从插件线程运行,并且我尝试通过使用 [NSObject performSelectorOnMainThread] 和 [NSObject performSelector:onThread] 将其传递回主线程以及我存储在主线程中的线程插件线程创建方法。这两种解决方案在任何 npn 调用时仍然会崩溃。在处理导致状态对 NPN 浏览器交互调用无效的 CGEventTap 事件时,是否还有其他事情发生?

0 投票
1 回答
641 浏览

objective-c - 分段错误 11 | CGEventTap 应用程序在任意时间后停止处理鼠标事件。

此应用程序的目的是 24/7 全天候在后台运行并将鼠标锁定在屏幕中央。它适用于一系列 Flash 程序来模拟鼠标的操纵杆式移动。我已经尝试使用 Cocoa/Quartz 中内置的其他方法来实现这一点,但它们都没有达到我的目的,所以这就是我必须这样做的方式。

我一直试图弄清楚为什么在看似随机的时间之后,这个程序只是停止限制鼠标。该程序没有给出错误或类似的东西,它只是停止工作。强制退出屏幕确实显示“不响应”,但是,我的许多鼠标修改脚本,包括这个脚本,总是读为“不响应”并且它们继续运行。

这是代码:


最终更新

Ken Thomases 给了我正确的答案,我已经根据他的建议更新了我的代码。这是我完美运行的最终代码(在我手动停止之前,它运行了 12 多个小时,没有出现任何故障):


(第一)更新:

该程序仍在崩溃,但我现在已将其作为可执行文件运行并收到错误代码。

当它终止时,控制台会记录“Segmentation Fault:11”。

我一直试图找出这意味着什么,但它似乎是一个令人印象深刻的广泛术语,而且我还没有磨练出一些有用的东西。

这是我正在使用的新代码:

0 投票
1 回答
496 浏览

objective-c - 无法通过事件点击在某些应用程序上模拟退格按钮

我正在尝试在 Mac OS 上模拟一些按键。如果按下“h”键(例如,如果用户键入“tigh”,它将变为“ti”),此代码应该通过修改键盘事件删除前一个字符。但是它只适用于某些应用程序;其他人完全拒绝我的活动。这段代码有问题吗?

0 投票
2 回答
725 浏览

objective-c - CGEventPost 不适用于某些应用程序上的退格字符

(这个问题与我最近在这里发布的问题相似,只是现在我使用 CGEventPost 来模拟更多击键而不是修改当前事件)

每次按下“h”按钮时,下面的代码都能够插入一个“a”字符,它适用于所有应用程序。

如果我将 'a' 替换为退格字符,某些应用程序(例如 Mac 上的 Microsoft Excel ...)将不再识别它。你知道为什么吗?

0 投票
1 回答
169 浏览

objective-c - 全局应用监控 macos/cocoa/objective-c

有没有办法监控在应用程序中执行的操作?例如,用户在 Safari 中打开一个新选项卡。我试图监控这些行为。我正在寻找一个能识别这种行为的类!

任何人的提示或想法?

谢谢

多哥

0 投票
1 回答
325 浏览

macos - Mountain Lion 登录窗口 CGEvent 失败

我有一个应用程序,它使用 CGEvent 点击来捕捉按键和鼠标事件。

示例 .. CGEventTapCreate(kCGHIDEventTap, kCGTailAppendEventTap, 1, eventMask, keyUp, @"mydata");

我也生成事件。一切正常,除非此应用程序(PrivilegedHelperTool)作为登录前启动代理(登录窗口)运行。该应用程序显示正常,但我所有的点击都返回 null 并且我生成的事件不起作用。处于预登录状态时,除了“kCGHIDEventTap”之外还有其他内容吗?

我已经使用 IOKit 来捕捉鼠标移动(工作),但是在实现按键时,似乎不推荐使用这种 IOKit 东西,并且大多数建议说使用 CGEvent Equivalents。