2011-01-09 13 views
13

मैं अपने OSX आवेदन पृष्ठभूमि में बैठते हैं और कीबोर्ड शॉर्टकट कार्रवाई में जाने के लिए के लिए इंतजार करना चाहते हैं। यह वरीयताओं में ग्रोल के समान विन्यास योग्य होना चाहिए, या स्टेटसबार में ड्रॉपबॉक्स के रूप में सुलभ होना चाहिए।OSX कीबोर्ड शॉर्टकट पृष्ठभूमि आवेदन, कैसे

  • मुझे किस प्रकार का एक्सकोड टेम्पलेट उपयोग करना है?
  • मैं वैश्विक स्तर पर कीबोर्ड शॉर्टकट कैप्चर कैसे करूं?

उत्तर

11

यदि आप इसे प्राथमिकता में एक्सेस करना चाहते हैं, तो वरीयता फलक टेम्पलेट का उपयोग करें। यदि आप इसे स्टेटस बार में चाहते हैं, तो सामान्य एप्लिकेशन बनाएं, LSUIElement कुंजी को Info.plist में 1 पर सेट करें, और आइटम बनाने के लिए NSStatusItem का उपयोग करें।

विश्व स्तर पर शॉर्टकट बनाने के लिए, आप कार्बन ढांचा भी शामिल करने की ज़रूरत। घटनाओं के लिए पंजीकरण करने के लिए RegisterEventHotKey और UnregisterEventHotKey का उपयोग करें।

OSStatus HotKeyEventHandlerProc(EventHandlerCallRef inCallRef, EventRef ev, void* inUserData) { 
    OSStatus err = noErr; 
    if(GetEventKind(ev) == kEventHotKeyPressed) { 
     [(id)inUserData handleKeyPress]; 
    } else if(GetEventKind(ev) == kEventHotKeyReleased) { 
     [(id)inUserData handleKeyRelease]; 
    } else err = eventNotHandledErr; 
    return err; 
} 

//EventHotKeyRef hotKey; instance variable 

- (void)installEventHandler { 
    static BOOL installed = NO; 
    if(installed) return; 
    installed = YES; 
    const EventTypeSpec hotKeyEvents[] = {{kEventClassKeyboard,kEventHotKeyPressed},{kEventClassKeyboard,kEventHotKeyReleased}}; 
    InstallApplicationEventHandler(NewEventHandlerUPP(HotKeyEventHandlerProc),GetEventTypeCount(hotKeyEvents),hotKeyEvents,(void*)self,NULL); 
} 

- (void)registerHotKey { 
    [self installEventHandler]; 
    UInt32 virtualKeyCode = ?; //The virtual key code for the key 
    UInt32 modifiers = cmdKey|shiftKey|optionKey|controlKey; //remove the modifiers you don't want 
    EventHotKeyID eventID = {'abcd','1234'}; //These can be any 4 character codes. It can be used to identify which key was pressed 
    RegisterEventHotKey(virtualKeyCode,modifiers,eventID,GetApplicationEventTarget(),0,(EventHotKeyRef*)&hotKey); 
} 
- (void)unregisterHotKey { 
    if(hotkey) UnregisterEventHotKey(hotKey); 
    hotKey = 0; 
} 

- (void)handleHotKeyPress { 
    //handle key press 
} 
- (void)handleHotKeyRelease { 
    //handle key release 
} 
13

गिटहब पर डेव डीलॉन्ग की DDHotKey कक्षा पर एक नज़र डालें।

डीडीएचओटीके सिस्टम कुंजी घटनाओं या "हॉटकी" का जवाब देने के लिए एक एप्लिकेशन को पंजीकृत करने के लिए उपयोग में आसान कोको कक्षा है।

एक वैश्विक हॉटकी एक महत्वपूर्ण संयोजन है जो हमेशा एक विशिष्ट क्रिया निष्पादित करता है, भले ही कौन सा ऐप सबसे आगे है। उदाहरण के लिए, "कमांड-स्पेस" की मैक ओएस एक्स डिफ़ॉल्ट हॉटकी स्पॉटलाइट सर्च बार दिखाती है, भले ही खोजक सबसे बड़ा एप्लीकेशन न हो।

एक उदार लाइसेंस भी।

+3

+1 अच्छा जवाब :) –

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