gpt4 book ai didi

objective-c - CGEventTapCreate() 调用问题

转载 作者:行者123 更新时间:2023-12-03 16:53:19 31 4
gpt4 key购买 nike

我正在尝试使用以下代码注册全局关键事件:

void function()
{
CFMachPortRef keyUpEventTap = CGEventTapCreate(kCGHIDEventTap,kCGHeadInsertEventTap,kCGEventTapOptionListenOnly,CGEventMaskBit(kCGEventKeyUp),&keyUpCallback,NULL);


CFRunLoopSourceRef keyUpRunLoopSourceRef = CFMachPortCreateRunLoopSource(NULL, keyUpEventTap, 0);
CFRelease(keyUpEventTap);

CFRunLoopAddSource(CFRunLoopGetCurrent(), keyUpRunLoopSourceRef, kCFRunLoopDefaultMode);
CFRelease(keyUpRunLoopSourceRef);
}

执行 CFMachPortCreateRunLoopSource() 调用时应用程序崩溃。我认为崩溃是由于我创建事件点击时的 CGEventMaskBit(kCGEventKeyUp) 造成的。

但是如果我使用 CGEventTapCreate(kCGHIDEventTap,kCGHeadInsertEventTap,kCGEventTapOptionListenOnly,CGEventMaskBit(kCGEventFlagsChanged),&keyUpCallback,NULL) 创建事件点击,应用程序运行良好。它不会崩溃。当按下任何修饰键时我都会收到回调。但我需要获得按下删除键的回调。

有什么想法吗?

谢谢

迪拉吉。

最佳答案

我认为您需要特殊权限才能注册键盘事件。我忘记了那是什么,但为了测试它,以 root 身份运行程序,看看它是否仍然崩溃。

编辑:

根据this article您必须以 root 身份运行该程序或启用辅助设备。

崩溃可能只是因为 CGEventTapCreate 返回 NULL。

关于objective-c - CGEventTapCreate() 调用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947339/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com