2011-05-13 11 views
8

¿Es posible obtener el estado del teclado en Objective-C sin referirse a NSEvent?Cómo obtener el estado del teclado en Objective-C sin hacer referencia a NSEvent

En general, no puedo usar NSResponder métodos como -[NSResponder flagsChanged:] pero necesito saber si la tecla Comando está presionada actualmente.

+0

Um. ** ¿Por qué ** no puedes referirte a NSEvent? – walkytalky

+0

La respuesta a esta pregunta a partir de hoy debería ser útil: http://stackoverflow.com/questions/5994656/how-to-tell-if-a-modifier-key-is-down-during-drop-on-dock –

+0

@Josh que usa un evento. –

Respuesta

16

Todavía me pregunto por qué no puede usar NSEvent, pero de todos modos voy a responder la pregunta. Tal vez estás construyendo una "herramienta de línea de comandos" y solo están vinculados con Foundation. Tendrás que incluir al menos un marco más. Si desea establecer un vínculo con AppKit, puede (como mencioné en los comentarios) usar +[NSEvent modifierFlags]; este es un método de clase en NSEvent, por lo que puede usarlo en cualquier lugar, sin necesidad de tener acceso a un evento individual, para obtener el estado actual de las teclas modificadoras como una máscara de bits. Los documentos explican el meaning of the bitmask.

if(NSCommandKeyMask & [NSEvent modifierFlags]){ 
    NSLog(@"Oh, yeah!"); 
} 

También puede obtener esta información usando Quartz Event Services. En este caso, debe incluir el marco ApplicationServices *. El CGEventSource functions le dará la same bitmask que se obtiene de NSEvent:

CGEventFlags theFlags; 
theFlags = CGEventSourceFlagsState(kCGEventSourceStateHIDSystemState); 
if(kCGEventFlagMaskCommand & theFlags){ 
    NSLog(@"Uh huh!"); 
} 

* Esto ya está incluido si usted es, de hecho, escribir una aplicación Cocoa - es parte de cuarzo.

+0

Gracias Josh, esto es exactamente lo que necesito – shpoont

Cuestiones relacionadas