我用Captur键盘输入的objext-cpp应用程序编写了一个c ++。 当我在xcode上调试应用程序时,它工作得很好。
当我运行应用程序时没有root用户它只捕获控制键事件。 当我以root身份运行应用程序时,它运行良好。
创建活动的代码:
bool KeyboardListener::Run()
{
bool bRet = true;
CFMachPortRef l_EventTap;
CGEventMask l_EventMask = 0;
CFRunLoopSourceRef l_RunLoopSource = NULL;
try
{
do
{
l_EventMask = (CGEventMaskBit(kCGEventFlagsChanged) | CGEventMaskBit(kCGEventKeyDown));
l_EventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionListenOnly , l_EventMask, KeyboardListenerEventCallback , this);
if (l_EventTap == NULL)
{
printf("failed to create event tap\r\n");
bRet = false;
break;
}
l_RunLoopSource = CFMachPortCreateRunLoopSource(NULL, l_EventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), l_RunLoopSource , kCFRunLoopCommonModes);
CGEventTapEnable(l_EventTap, true);
if(l_EventTap != NULL)
{
CFRelease(l_EventTap);
l_EventTap = NULL;
}
if(l_RunLoopSource != NULL)
{
CFRelease(l_RunLoopSource);
l_RunLoopSource = NULL;
}
CFRunLoopRun();
} while (false);
if(l_EventTap != NULL)
{
CFRelease(l_EventTap);
}
if(l_RunLoopSource != NULL)
{
CFRelease(l_RunLoopSource);
}
}
catch (std::exception &e)
{
//printf("Error: Exception Occurred, System Description %s", e.what());
bRet = false;
}
catch(...)
{
//printf("Error: Exception Occurred");
bRet = false;
}
return bRet;
}
可以将此应用程序作为“LaunchAgents”运行吗? 我做错了什么? 提前致谢