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

swift - 访问 refcon:UnsafeMutableRawPointer 时崩溃?CGEventTap 回调内部

我有一个用于 CGEventTap 的 myCGEventCallback 函数,它接受参数“refcon:UnsafeMutableRawPointer?”。

我将我的主 ViewController 作为指向回调的指针传递给使用

然后在回调中,我使用 ViewController 访问

当事件发生时,回调工作正常。但是,它只能工作 4 次。当同一事件第五次发生时,我的应用程序崩溃,调试控制台只显示“LLDB”。

当我尝试访问发件人时,它似乎崩溃了。“发件人.someFunction()”。它在函数运行之前崩溃,所以我认为它在访问发件人时有问题。

这是因为内存管理不善吗?也许我需要释放指针?如果是这样,我将如何以及在哪里这样做?

谢谢!

0 投票
0 回答
170 浏览

macos - 如何获取自己进程的进程序列号?

我正在尝试为我自己的进程安装一个事件水龙头来拦截鼠标事件。

为此,我找到了函数CGEventTapCreateForPSN,它需要一个进程的序列号作为它的第一个参数。如何获取自己进程的 PSN?GetCurrentProcess已弃用,GetProcessInformation也已被删除。

我知道,CGEventTapCreate但据我了解,它安装了一个系统范围的钩子,这听起来不是一个好主意或我想做的事情。我也知道CGEventTapCreateForPid但我不能使用它,因为我还针对没有该功能的旧 MacOSX 版本,而且它似乎也没有记录,所以谁知道它什么时候会消失。

仅供参考,我不拥有实际的程序,我的代码仅作为动态库加载到进程中,所以我不能只修改程序的代码或类似的东西。

0 投票
0 回答
512 浏览

macos - 以编程方式禁用“摇动以查找指针”MacOS 功能而不隐藏光标

我知道这个问题,但这与我正在寻找的不同,因为接受的答案隐藏了光标。

我正在编写将鼠标左键重新映射到左 CTRL 键的软件。

我让它工作了,但有一个问题:当我按住 CTRL 键并拖动鼠标指针时,此功能通常会激活,这会扰乱我的拖动操作(感觉就像试图改变在冰上运行的方向)。

因此,Apple 工程师必须在鼠标左键按下时禁用此功能,并在释放按钮时重新启用它。

像这样的东西 - 但是当我注入我的模拟鼠标事件时,该功能不会禁用。

我的意思是:必须有一些程序化的方式来做这件事,即使它是一个内部的 Apple 功能。除非Apple在链接答案中使用该解决方案,即NSCursor.hide()然后在光标位置手动绘制光标图标。

我怎样才能干净地完成这个?

编辑: A CGEventTapfor NSEventTypeGestureor NSEventTypeMagnifyfailed to catch 任何东西。

0 投票
0 回答
296 浏览

macos - 如何在 MacOS 上使用 CAPS-LOCK 事件

我正在尝试重新映射 CAPS-LOCK。

我可以使用CGEventTap.

但是,我无法食用它们。(OTOH我可以使用普通的按键/向上事件)。

下面的代码摘录说明了这一点:

这一把钥匙怎么能逃脱约束其余钥匙的规则?

我必须下拉到 IOHID 层吗?

REF:在 OS X 中以编程方式模拟/切换 CAPS LOCK

或者,注入解毒剂 CAPS-LOCK 事件会取消真实事件的效果是否有意义?

0 投票
1 回答
121 浏览

xcode - 自动允许应用程序(由 Xcode 构建和运行)控制您的计算机

我正在 Xcode / ObjC 中开发一个辅助 MacOS 应用程序。

它使用事件点击拦截击键。

当我从 Xcode 运行它时,我得到:

我必须去system preferences -> security & privacy -> privacy -> {unlock the padlock putting my admin password} -> {locate, uncheck and recheck my executable from the list},像这样:

在此处输入图像描述

每次修改一行代码,再次运行,都要经过这个检查和取消检查的过程。

这是一个非常笨拙的开发周期。

有没有办法避免这种情况?

0 投票
1 回答
116 浏览

objective-c - 创建`NSEvent object`然后`CGEventPost`和`[ev CGEvent]`然后退出方法是否安全?

我有以下 Objective-C 片段:

该项目已启用 ARC。

这是安全的,还是我遇到了偶尔的内存访问错误?

我担心NSObject在系统仍在使用它时可能会被垃圾收集CGEvent

0 投票
1 回答
67 浏览

cgeventtap - 在`NSEventTap`中返回我自己创建的`CGEvent`

CGEventTapCallBack 这里的文档说明:

CGEventRef 事件 传入事件。该事件归调用者所有,无需释放。

如果我想吃这个活动,然后返回,会发生什么NULL?我CFRelease应该自己做吗?

同样,如果我想用我自己创建的事件替换它,我应该CFRelease传入事件和CFRetain新创建的事件吗?

或者我是否受限于修改CGEvent就地接收的内容?确实是这样吗,有没有我可以使用热插拔的 API 调用?

0 投票
0 回答
140 浏览

macos - Macos 应用程序在使用 NSDistributedNotificationCenter 和 CFRunLoopAddSource 时挂起

我有使用 Qt 构建的 MacOS 应用程序。在那里,我创建了 NSDistributedNotificationCenter 以在可访问性设置更改时收到通知(观察“com.apple.accessibility.api”)。我也有 CFRunLoopAddSource 来监控按键事件。

但是,当我运行程序并更改辅助功能时,应用程序挂起并且无法正常运行。

有人可以帮忙看看为什么会这样吗?

这是代码:

在这里我正在创建观察者:创建/删除由按钮单击控制

这就是我添加关键事件记录器的方式:

请问有什么想法吗?

提前致谢和问候

0 投票
1 回答
59 浏览

macos - 确定 macOS 上是否存在触控板

AppKit(或其他地方)中是否有 API 来确定设备是否连接并启用了触控板?我需要我的应用程序在滚动事件上启用不同的行为,具体取决于它们是来自触控板上的两指自然滚动手势还是来自传统鼠标上的仅垂直滚动。

浏览文档,我找不到任何东西,谷歌搜索似乎也没有透露任何东西。

我目前正在使用事件点击来接收事件(另外,请注意我的原生 macOS 开发经验很少,所以不要假设很多先验知识)

0 投票
0 回答
137 浏览

objective-c - 屏幕放大时,带有 CGEventCreateMouseEvent 的鼠标事件不考虑坐标

我有一个简单的 Objective C 函数用于执行鼠标事件(单击):

问题是,如果屏幕被缩放(Control + Scroll),那么点击它的点就不是它应该在的位置(我猜它使用的是基于新视口的坐标,但即便如此它也没有意义)。

这是库中的错误吗?无论如何要注意用户放大并仍然单击正确的位置,即使这意味着移动屏幕视口?