我想以编程方式在"系统偏好设置"中为辅助设备启用Access.但问题是我的应用程序没有以root用户身份运行,我不希望我的应用程序成为root用户,也不应该要求在它们之间进行任何身份验证.
我想全局点击所有键盘事件.我正在使用CGEventTapCreate().在CGEventTapCreate()API的文档中,提到了,如果满足下列条件之一,则事件抽头接收密钥和密钥事件:
我通过从系统首选项检查辅助设备的启用访问来手动尝试,它给了我预期的输出.
那么有什么方法可以通过程序执行相同的操作而不需要身份验证,并且应用程序也不是以root用户身份运行的?
谢谢,
Dheeraj.
我正在尝试使用此代码注册全局关键事件:
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);
}
Run Code Online (Sandbox Code Playgroud)
应用程序在执行CFMachPortCreateRunLoopSource()调用时崩溃.我认为崩溃是因为CGEventMaskBit(kCGEventKeyUp),当我创建一个事件点击时.
但是如果我创建事件点击使用CGEventTapCreate(kCGHIDEventTap,kCGHeadInsertEventTap,kCGEventTapOptionListenOnly,CGEventMaskBit(kCGEventFlagsChanged),&keyUpCallback,NULL),应用程序工作正常.它没有崩溃.当按下任何修改键时,我会收到回调.但我需要按下删除键的回调.
有任何想法吗?
谢谢,
Dheeraj.