2010-10-07 8 views

Respuesta

16

he logrado esto en mi propia aplicación subclasificando NSApplication (y el establecimiento de la clase principal de la aplicación de esta subclase). Captura claves de búsqueda y reproducción/pausa y las traduce a acciones específicas en mi delegado de aplicaciones.

líneas pertinentes:

#import <IOKit/hidsystem/ev_keymap.h> 

- (void)sendEvent:(NSEvent *)event 
{ 
    // Catch media key events 
    if ([event type] == NSSystemDefined && [event subtype] == 8) 
    { 
     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]; 
} 

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

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

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

estoy recibiendo este mensaje de consola raro. ¿Alguna pista de por qué? Además, estoy transmitiendo música y solo quiero que capte el botón Reproducir/Pausa. El volumen se puede hacer en la GUI de OS X regular. – Moshe

+0

¿Qué mensaje de consola extraño? Además, si solo desea reproducir/pausa, solo responda NX_KEYTYPE_PLAY (elimine los otros casos). –

+0

@Joshua Nozzi - ver mi edición. – Moshe

-1

En caso de que alguien viene a buscar, no es sample code to do this here. Este enfoque le permite "comer" los eventos que no llegan a iTunes u otras aplicaciones de reconocimiento de claves de medios.

Pero ten en cuenta que la sandbox no permite los grifos de eventos, por lo que esto no funcionará en la App Store. Si alguien tiene una solución para que me encantaría escuchar.

-1

Compruebe esto: https://gist.github.com/gauravk92/546311 Funciona perfectamente.

Como ejemplo, este repo lo utiliza: https://github.com/onepill/PauseIt

+0

Pero esto no funciona en App Sandbox o hay algo que puede hacer al respecto? – plaetzchen

+0

Sí. Necesita usar otro trabajo alternativo con una aplicación auxiliar (que eventualmente no será un espacio aislado). Mira esto: https://github.com/tredds/MagicKeys. Aplicaciones de E.g: https://itunes.apple.com/app/vox/id461369673?mt=12&ign-mpt=uo%3D4 con http://coppertino.com/addon/ –

Cuestiones relacionadas