iTunes y Reeder (y estoy seguro de que muchas otras aplicaciones) tienen la capacidad de modificar el comportamiento de inicio cada vez que se inician mientras se mantiene presionada la tecla ⌥ (opción). Traté de mirar los métodos NSApplicationDelegate
, pero ninguno parece agregar ningún tipo de pista a lo que estoy buscando. ¿Cómo se logra esta funcionalidad?¿Cuál es el truco detrás de "iniciar aplicación manteniendo [tecla modificadora]"?
Respuesta
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. )
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
Usted ha dicho mucho, pero sin cualquier solución real o incluso potencial, intente y responda directamente la pregunta en el futuro – shenku
+ (NSEventModifierFlags) modifierFlags NS_AVAILABLE_MAC (10_6); es un método de clase sin necesidad de una instancia –
- 1. Cómo controlar el estado de la tecla modificadora global (en cualquier aplicación)?
- 2. ¿Cuál es el concepto detrás de R.java?
- 3. ¿Cuál es tu truco de STL favorito?
- 4. ¿Cuál es el algoritmo detrás de sleep()?
- 5. ¿Cuál es el enfoque correcto para iniciar una aplicación GWT?
- 6. ¿Cuál es el código de tecla para "$"?
- 7. ¿Cuál es el truco de showS en Haskell?
- 8. ¿Cuál es la magia detrás de Lightstreamer?
- 9. ¿Qué es exactamente el truco de GNU ././@LongLink "truco"?
- 10. ¿Cuál es el "truco" para escribir un Quine?
- 11. ¿Cuál es el algoritmo detrás de la generación de buscaminas
- 12. ¿Cuál es el razonamiento de diseño detrás de HandleScope?
- 13. Determinar el estado de la tecla modificadora sin un objeto InputEvent en Java
- 14. ¿Cuál es su consejo/truco favorito de Windbg?
- 15. ¿Cuál es el concepto detrás de la compresión zip?
- 16. ¿Cuál es el razonamiento detrás de los encabezados?
- 17. ¿Cuál es el concepto general detrás de XSS?
- 18. ¿Cuál es el concepto básico detrás de WaitHandle?
- 19. ¿Cuál es el mecanismo detrás de startActivityForResult() en Android?
- 20. ¿Cuál es el código detrás de datagridtemplatecolumn, y cómo usarlo?
- 21. Cómo detectar la tecla modificadora con el clic del mouse en Qt
- 22. Javascript matriz en una especie de objeto, manteniendo la tecla
- 23. ¿Cuál es tu truco favorito contra la depuración?
- 24. Javascript, el valor de la pulsación de tecla siempre es un carácter detrás de la última?
- 25. ¿Cuál es el razonamiento detrás del contexto zeroMQ?
- 26. ¿Cuál es el razonamiento detrás del encabezado HTTP Date?
- 27. ANDROID: ¿Cuál es la idea principal detrás de usar strings.xml?
- 28. Iniciar aplicación desde el paquete de aplicación
- 29. ¿Cuál es el truco para inspeccionar el estilo de menú emergente/desplegable con Firebug?
- 30. cómo cambiar la tecla modificadora de cmd a ctrl en IntelliJ en una Mac?
Consulte la increíble http://stackoverflow.com/questions/16166895/declaring-and-checking-comparing-bitmask-enums-in-objective-c – uchuugaka