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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top