iTunes和Reeder(我相信很多其他的)应用程序能够在按住⌥(选项)键的同时修改启动行为。我试着查看NSApplicationDelegate
方法,但似乎没有任何暗示我正在寻找的东西。这个功能是如何实现的?
答案 0 :(得分:23)
在您的应用程序委托的applicationDidFinishLaunching:方法
中NSUInteger flags = ([NSEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask);
BOOL isOptionPressed = (flags == NSAlternateKeyMask);
(编辑为匹配真棒答案Declaring and checking/comparing (bitmask-)enums in Objective-C
以前这是
BOOL isOptionPressed = (0 != (flags & NSAlternateKeyMask));
但是,除非位掩码本身表示二进制中的全零,否则不需要进行零检查来检查相等的掩码是否相等。
提供的链接提供了更多细节。
)
答案 1 :(得分:1)
Francis McGrew的答案需要改进才能发挥作用,但我仍然看不到通过这条路线的解决方案。如上所述的答案没有编译。 modifierFlags需要一个实际的NSEvent指针,这不是一个类方法,正如答案所暗示的那样。
人们希望通过以下方式获得所需的事件。
NSEvent *event = [NSApp currentEvent];
然而,当从applicationDidFinishLaunching调用时,结果事件为nil。至少在我对Snow Leopard的测试中也是如此。
applicationDidFinishLaunching有一个NSNotification参数,但我不知道如何使用它。
我在2007年的cocobuilder.com上发现了一个类似的问题,其答案基本上是调用碳函数GetCurrentKeyModifiers并将碳标志转换为可可形式。
请参阅http://www.cocoabuilder.com/archive/cocoa/176882-detecting-modifier-keys-at-launch.html