【问题标题】:Monitor keyboard events by adding observer in RunLoop通过在 RunLoop 中添加观察者来监控键盘事件
【发布时间】:2012-07-11 21:57:38
【问题描述】:

我的Run Loop Observer是这样写的:

void observerCallback(CFRunLoopObserverRef observer,
    CFRunLoopActivity activity, void* info)
{
    println("%u", activity);
}
//----------------------------- 
void InstallObserver()
{
    CFRunLoopObserverRef myObserver = NULL;
    int myActivities = kCFRunLoopEntry;

    myObserver = CFRunLoopObserverCreate(NULL, myActivities, YES,
        /* repeat */ 0, &observerCallback, NULL);

    if (myObserver)
    {
        CFRunLoopAddObserver(CFRunLoopGetCurrent(), myObserver,
            kCFRunLoopCommonModes);
    }
}

每次我在应用程序中按任意键时,observerCallback 都会被调用 4 次。 问题是: 如何在observerCallback中获取key code? 谢谢。

【问题讨论】:

  • 你想用运行循环做什么,而你不能通过响应事件流来做到这一点? CFRunLoop 恰好是由这些事件触发的,但触发器基本上是使用响应者框架来处理事件,因此,运行循环本身并没有得到您正在寻找的信息。
  • 我的朋友盖格!我怎样才能为此目的使用“事件流”?有可能帮助我吗?谢谢。
  • 可能。你想做什么?
  • 我想监视我的进程空间(不是系统范围)中的键盘事件。似乎可可应用程序不支持 InstallEventHandler(目标 = GetApplicationEventTarget)(需要碳运行循环)。如果目标是 GetEventMonitorTarget() 则需要“通用访问”来激活(我不想要它)。
  • 这是一款没有windows的App吗?我问的原因是有一些方法,但每种方法都有自己的要求,并且取决于您的实际要求将取决于哪些解决方案有意义。您是否有要在其中监视事件的窗口?

标签: objective-c macos cocoa macos-carbon runloop


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多