"launch application holding [modifier key]"背后的诀窍是什么?



iTunes和Reeder(我相信还有很多其他的)应用程序在按住ctrl(选项)键启动时都有能力修改启动行为。我试着看NSApplicationDelegate方法,但似乎没有添加任何暗示,我正在寻找什么。这个功能是如何实现的?

在你的应用程序委托的applicationDidFinishLaunching: method

NSUInteger flags = ([NSEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask);
BOOL isOptionPressed = (flags == NSAlternateKeyMask);
在Objective-C中声明和检查/比较(bitmask-)枚举以前这是BOOL isOptionPressed = (0 != (flags & NSAlternateKeyMask));但是零检查并不需要检查位掩码是否相等,除非位掩码本身在二进制中表示所有的零。提供的链接提供了更详细的信息。)

Francis McGrew的答案需要改进才能起作用,但我仍然看不到通过这条路线的解决方案。如上所述的答案不能编译。modifierFlags需要一个实际的NSEvent指针,它不是一个类方法,正如答案所暗示的那样。

人们希望所需的事件可以通过以下方式获得。

NSEvent *event = [NSApp currentEvent];

然而,当从applicationDidFinishLaunching调用时,结果事件为nil。至少在我对雪豹的测试中是这样的。

applicationDidFinishLaunching有一个NSNotification参数但是我不知道如何使用它

我从2007年在cocobuilder.com上发现了一个类似的问题,答案基本上是调用碳函数GetCurrentKeyModifiers并将碳标志转换为可可形式。

见http://www.cocoabuilder.com/archive/cocoa/176882-detecting-modifier-keys-at-launch.html

最新更新