¿Cómo prevenir un pitido si se pulsa combinación de teclas global en la otra aplicación?
-
18-09-2019 - |
Pregunta
Mac OS X 10.6 - Cacao
Estoy usando el monitor evento global para la visualización de menú elemento de estado usando métodos abreviados de teclado:
globalEventMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event)
{
if ([event keyCode] == kVK_F12)
{
[self handleGlobalShortcut];
// How to prevent system beep?
}
}];
Esta solución está funcionando pero el sistema genera un pitido cada vez que el usuario presiona F12 y activa aplicación no responde a este evento clave.
¿Hay alguna manera de evitar que una aplicación activa de pitido cada vez que utilizo un acceso directo global?
Solución
En el monitor de eventos, es necesario activar la aplicación para que que recibirá el evento clave.
[NSApp activateIgnoringOtherApps:YES];
De lo contrario, el evento se pasa a la aplicación activa actual (que emitirá un pitido).
EDIT: Parece que esto no funcionará
.Según los documentos "No se puede modificar o evitar que el evento se entrega a su aplicación objetivo original" .
Así nueva API addGlobalMonitorForEventsMatchingMask
de Snow Leopard no es adecuado para el manejo de teclas de acceso rápido. Usted tendrá que seguir utilizando la antigua API RegisterEventHotKey
carbono. Afortunadamente, esta API es compatible con cacao de 64 bits en Snow Leopard.
Otros consejos
Parece imposible. Pitido es el comportamiento predeterminado de [NSResponder noResponderFor]. Así que un pitido de aplicación a menos que se sobrepase el comportamiento agregando una última respuesta, que es poco probable factible desde fuera de la aplicación.