OSX捕获键盘输入

时间:2015-06-22 14:14:00

标签: c++ objective-c macos keyboard

我用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”运行吗?  我做错了什么? 提前致谢

0 个答案:

没有答案