2010-03-19 11 views
6

कुछ मैक ऐप्स, जैसे आईट्यून्स और स्पॉटिफी, कुछ ऐप्पल कीबोर्ड पर प्ले/पॉज़/अगली/पिछले बटन पर प्रतिक्रिया करते हैं।मैक कीबोर्ड प्ले/पॉज़ इवेंट्स को सुनना

संभवतः वे किसी प्रकार के एनएसएनोटिफिकेशन में टैप कर रहे हैं, मैं वही कैसे कर सकता हूं?

उत्तर

5

मैं साथ NSApplication उपवर्गीकरण (और मेरी लक्ष्य की जानकारी में आवेदन वर्ग के रूप में उस वर्ग की स्थापना) द्वारा इस निम्न करें:

#import <IOKit/hidsystem/ev_keymap.h> 

...

- (void)mediaKeyEvent:(int)key state:(BOOL)state 
{ 
switch (key) 
{ 
    // Play pressed 
    case NX_KEYTYPE_PLAY: 
    if (state == NO) 
    [(TSAppController *)[self delegate] togglePlayPause:self]; 
    break; 

    // FF pressed 
    case NX_KEYTYPE_FAST: 
    if (state == YES) 
    [(TSAppController *)[self delegate] seekForward:self]; 
    break; 

    // RW pressed 
    case NX_KEYTYPE_REWIND: 
    if (state == YES) 
    [(TSAppController *)[self delegate] seekBack:self]; 
    break; 
} 
} 

- (void)sendEvent:(NSEvent *)event 
{ 
// Catch media key events 
if ([event type] == NSSystemDefined && [event subtype] == NX_SUBTYPE_AUX_CONTROL_BUTTONS) 
{ 
    int keyCode = (([event data1] & 0xFFFF0000) >> 16); 
    int keyFlags = ([event data1] & 0x0000FFFF); 
    int keyState = (((keyFlags & 0xFF00) >> 8)) == 0xA; 

    // Process the media key event and return 
    [self mediaKeyEvent:keyCode state:keyState]; 
    return; 
} 

// Continue on to super 
[super sendEvent:event]; 
} 

"राज्य" में -mediaKeyEvent: राज्य: ऊपर/नीचे के लिए है। मेरे ऐप में यह केवल बैक अप (दबाए जाने पर) प्ले/पॉज़ कुंजी पर प्रतिक्रिया करने के लिए समझ में आता है, लेकिन जब मैं मांग के लिए कुंजी डाउन करता हूं तो मैं लगातार आरडब्ल्यू/एफएफ घटनाओं पर प्रतिक्रिया करता हूं।

यदि यह मौजूद है, तो मुझे ऐसा करने के बेहतर तरीके से जानना अच्छा लगेगा। वर्तमान में, जब तक कि उपयोगकर्ता इन कुंजी को ग्लोबल कीबोर्ड शॉर्टकट में अक्षम नहीं करता है, तो यह मेरे ऐप और आईट्यून्स को नियंत्रित करता है। :-)

यह कोड मेरे transcription app में काफी समय से उपयोग किया गया है और ऊपर काम करता है (ऊपर वैश्विक कीबोर्ड शॉर्टकट समस्या से अलग)।

+0

ब्रार, जादू संख्याएं। आपको 'NX_SUBTYPE_AUX_CONTROL_BUTTONS' और' NX_KEYUPMASK'/'NSKeyUpMask' में रुचि हो सकती है (बाद में' keyflags' चर में '0x800' हो रहा है)। –

+0

हाँ, मैं उस वाक्यांश का जिक्र करने जा रहा था लेकिन सोचा कि "बेहतर तरीका" इसमें शामिल है। :-) स्थिरांक के लिए धन्यवाद। –

+0

RegisterEventHotKey आपको इन हॉटकी के नियंत्रण का दावा करने दे सकता है? यदि आप सीएमडी + स्पेस जैसी हॉटकी पंजीकृत करते हैं, तो आप इसे डॉक के साथ-साथ अपने ऐप द्वारा नियंत्रित कर सकते हैं। –

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