当我不关注窗口时,我想通过Cocoa获得关键值。 如果你知道,请教我。
答案 0 :(得分:3)
如果我理解了这个问题,您想知道何时按下某个键,即使您的应用程序/窗口不是最前面的窗口?
如果是这种情况,您可以使用+[NSEvent addGlobalMonitorForEventsMatchingMask:handler:]
(仅限10.6+)或使用CGEventTap
。
答案 1 :(得分:1)
要使用addGlobalMonitorForEventsMatchingMask或CGEventTap,您的应用程序将需要以root身份运行。我无法让NSEvent方法适合我,但是CGEventTap却以root身份被罚款。
CGEventTap方法的优点是:
答案 2 :(得分:0)
我最近asked this question使用了addGlobalMonitorForEventsMatchingMask,正如Dave Delong建议的那样,@ NSGod向我指出。
我很难搞清楚块语法,所以我将引用我发布到该答案的代码:
// register for keys throughout the device...
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(struct NSEvent *event){
NSString *chars = [[event characters] lowercaseString];
unichar character = [chars characterAtIndex:0];
NSLog(@"keydown globally! Which key? This key: %c", character);
}];
用块来记住的是它们直接提供给方法调用。我在my own question附加了一个更全面的描述,但是如果您按照上面的语法并将块视为一种“内联委托方法”,那么您应该做得很好。