2011-09-11 10 views

Respuesta

23

En applicationDidFinishLaunching de su delegado aplicación: Método

NSUInteger flags = ([NSEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask); 

BOOL isOptionPressed = (flags == NSAlternateKeyMask); 

(Editado para que coincida con la respuesta impresionante Declaring and checking/comparing (bitmask-)enums in Objective-C Anteriormente esto era BOOL isOptionPressed = (0 != (flags & NSAlternateKeyMask)); Pero la comprobación de cero no es necesario comprobar si una máscara de bits para la igualdad, a menos que el la máscara de bits en sí misma representa todos los ceros en binario. El enlace proporcionado proporciona más detalles. )

+0

Consulte la increíble http://stackoverflow.com/questions/16166895/declaring-and-checking-comparing-bitmask-enums-in-objective-c – uchuugaka

1

La respuesta de Francis McGrew necesita im mejora antes de que pueda funcionar, pero todavía no veo solución a través de esa ruta. La respuesta como se indica no compila. Se necesita un puntero NSEvent real para modifierFlags, que no es un método de clase como sugeriría la respuesta.

Uno esperaría que el evento necesario se pudiera obtener con lo siguiente.

NSEvent *event = [NSApp currentEvent]; 

Sin embargo, cuando se llama desde applicationDidFinishLaunching el evento resultante es nil. Al menos esto es cierto en mis pruebas en Snow Leopard.

applicationDidFinishLaunching tiene un argumento NSNotification pero no sé cómo hacer uso de él.

Encontré una pregunta similar en cocobuilder.com desde 2007 y la respuesta es básicamente llamar a la función de carbono GetCurrentKeyModifiers y convertir las banderas de carbono en forma de cacao.

Ver http://www.cocoabuilder.com/archive/cocoa/176882-detecting-modifier-keys-at-launch.html

+0

Usted ha dicho mucho, pero sin cualquier solución real o incluso potencial, intente y responda directamente la pregunta en el futuro – shenku

+0

+ (NSEventModifierFlags) modifierFlags NS_AVAILABLE_MAC (10_6); es un método de clase sin necesidad de una instancia –

Cuestiones relacionadas