2011-09-11 10 views
16

आईट्यून्स और रीडर (और मुझे यकीन है कि बहुत सारे अन्य) अनुप्रयोगों में ⌥ (विकल्प) कुंजी रखने के दौरान लॉन्च होने पर स्टार्टअप व्यवहार को संशोधित करने की क्षमता होती है। मैंने NSApplicationDelegate विधियों को देखने का प्रयास किया, लेकिन कोई भी जो भी मैं ढूंढ रहा हूं उसे संकेत देने के लिए कोई भी प्रतीत नहीं होता है। यह कार्यक्षमता कैसे प्राप्त की जाती है?"लॉन्च एप्लिकेशन होल्डिंग [संशोधक कुंजी]" के पीछे क्या चाल है?

उत्तर

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)); था मैच के लिए संपादित किया गया लेकिन शून्य चेकिंग, अगर समानता के लिए एक सा मुखौटा जांच करने के लिए आवश्यक नहीं है जब तक कि बिट मास्क खुद बाइनरी में सभी शून्य का प्रतिनिधित्व करता है। प्रदान किया गया लिंक अधिक जानकारी देता है। )

+0

कृपया अद्भुत http://stackoverflow.com/questions/16166895/declaring-and-checking-comparing-bitmask-enums-in-objective-c का उल्लेख – uchuugaka

1

फ्रांसिस मैकग्रा के उत्तर की आवश्यकता है I यह काम करने से पहले साबित हो सकता है, लेकिन मुझे अभी भी उस मार्ग के माध्यम से कोई समाधान नहीं दिख रहा है। जैसा कि बताया गया है संकलित नहीं है। संशोधकफ्लैग के लिए एक वास्तविक एनएसईएंड पॉइंटर की आवश्यकता होती है, जो क्लास विधि नहीं है क्योंकि उत्तर सुझाव देगा।

कोई उम्मीद करेगा कि आवश्यक घटना निम्नलिखित द्वारा प्राप्त की जा सकती है।

NSEvent *event = [NSApp currentEvent]; 

हालांकि जब आवेदन से कहा जाता हैडिफ़िशिश परिणामस्वरूप घटना को लॉन्च करना शून्य है। कम से कम यह हिम तेंदुए पर मेरे परीक्षण में सच है।

applicationDidFinishLaunching में एनएसएनोटिफिकेशन तर्क है लेकिन मुझे नहीं पता कि इसका कोई उपयोग कैसे किया जाए।

मुझे 2007 से cocobuilder.com पर एक समान प्रश्न मिला और मूल रूप से कार्बन फ़ंक्शन GetCurrentKeyModifiers को कॉल करने और कार्बन झंडे कोको रूप में परिवर्तित करने के लिए उत्तर दिया गया है।

देखें http://www.cocoabuilder.com/archive/cocoa/176882-detecting-modifier-keys-at-launch.html

+0

आप बहुत कुछ लेकिन बिना कहा है किसी भी वास्तविक या यहां तक ​​कि संभावित समाधान, भविष्य में – shenku

+0

+ (NSEventModifierFlags) संशोधकफ्लैग NS_AVAILABLE_MAC (10_6) में प्रश्न का सीधे प्रयास करें और जवाब दें; एक वर्ग विधि एक उदाहरण के लिए कोई ज़रूरत नहीं है –

संबंधित मुद्दे