小编Dhe*_*raj的帖子

以编程方式启用辅助设备的访问权限

我想以编程方式在"系统偏好设置"中为辅助设备启用Access.但问题是我的应用程序没有以root用户身份运行,我不希望我的应用程序成为root用户,也不应该要求在它们之间进行任何身份验证.

我想全局点击所有键盘事件.我正在使用CGEventTapCreate().在CGEventTapCreate()API的文档中,提到了,如果满足下列条件之一,则事件抽头接收密钥和密钥事件:

  1. 当前进程以root用户身份运行.
  2. 启用辅助设备访问.在Mac OS X v10.4及更高版本中,您可以使用"系统偏好设置","通用访问"面板,"键盘"视图启用此功能.

我通过从系统首选项检查辅助设备的启用访问来手动尝试,它给了我预期的输出.

那么有什么方法可以通过程序执行相同的操作而不需要身份验证,并且应用程序也不是以root用户身份运行的?

谢谢,

Dheeraj.

scripting cocoa accessibility objective-c accessibility-api

7
推荐指数
1
解决办法
3688
查看次数

CGEventTapCreate()调用问题

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

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.

cocoa objective-c

1
推荐指数
1
解决办法
3377
查看次数