Как контролировать глобальное состояние модифицирующей клавиши (в каком-либо приложении)?

Я обычно иду с IFoo для интерфейса и AbstractFoo для скелетной реализации, которая является соединением конвенций Java и.NET.

11
задан 9 revs 22 October 2009 в 17:49
поделиться

2 ответа

Один из вариантов - использовать EventTaps. Это позволяет отслеживать все события клавиатуры. Видеть: http://developer.apple.com/mac/library/documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html#//apple_ref/c/func/CGEventTapCreate

К сожалению, краны событий перестанут работать, если приложение запрашивает безопасный ввод. Например Quicken.

3
ответ дан 3 December 2019 в 11:52
поделиться
OSStatus err = InstallApplicationEventHandler(&globalHotkeyHandler, GetEventTypeCount(eventTypes), eventTypes, NULL, NULL);

Это не глобально. Это устанавливает обработчик только тогда, когда ваше собственное приложение активно, и (я полагаю) после собственных фильтров событий Carbon Event Manager.

Вам необходимо использовать InstallEventHandler , который принимает цель события в качестве первого параметра ( InstallApplicationEventHandler - это макрос, который передает цель события приложения).

Для событий, которые происходят, когда ваше приложение неактивно, желаемой целью является GetEventMonitorTarget () . Для событий, которые происходят, когда ваше приложение активно , вам нужна цель GetEventDispatcherTarget () . Чтобы улавливать события независимо от того, какое приложение активно, установите обработчик на обе цели.

Однако в настоящее время я бы просто использовал CGEventTaps, как предложил Лейбовицн.

1
ответ дан 3 December 2019 в 11:52
поделиться