首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向后台应用发送CGEvents击键

向后台应用发送CGEvents击键
EN

Stack Overflow用户
提问于 2011-05-21 10:50:58
回答 1查看 1.3K关注 0票数 3

我正在尝试将enter键发送到后台应用程序,如下所示:

代码语言:javascript
运行
复制
CGEventRef a = CGEventCreateKeyboardEvent(eventSource, 36, true);
CGEventRef b = CGEventCreateKeyboardEvent(eventSource, 36, false);
CGEventPostToPSN(&psn, a);
CGEventPostToPSN(&psn, b);

它不工作,我想这是因为应用程序必须是最前面的应用程序才能接收按键?我说的对吗?如果是这样的话,有没有什么我可以发送这个事件,而不是首先激活应用程序?如果不是,那么我做错了什么?谢谢。

EN

Stack Overflow用户

发布于 2011-05-22 04:39:59

后台的应用程序不会对关键事件起作用。你有两个选择让你的应用程序在后台处理它们:Event Taps+[NSEvent addLocalMonitorForEventsMatchingMask:]NSEvent选项非常简单:

代码语言:javascript
运行
复制
// A block callback to handle the events
NSEvent * (^monitorHandler)(NSEvent *);
monitorHandler = ^NSEvent * (NSEvent * theEvent){
    NSLog(@"Got a keyDown: %d", [theEvent keyCode]);
    // The block can return the same event, a different 
    // event, or nil, depending on how you want it to be 
    // handled later. In this case, being in the background, 
    // there won't be any handling regardless.
    return theEvent;
};

// Creates an object that we don't own but must keep track of to
// remove later (see docs). Here, it is placed in an ivar.
monitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask 
                                                handler:monitorHandler];

但是您已经在处理事件分流了,所以您可能只想走这条路。

代码语言:javascript
运行
复制
// Creates an object that must be CFRelease'd when we're done
CFMachPortRef tap = CGEventTapCreateForPSN(myOwnPSN, 
                                       kCGTailAppendEventTap,
                                       kCGEventTapOptionDefault, 
                                       kCGEventKeyDown,
                                       myEventTapCallback, 
                                       NULL);

回调很简单。有关信息,请参阅事件服务参考中的Callbacks

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6079308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档