2014-02-18 5 views
1

Я работаю над приложением, которое использует Shapakovski для отличного MASShortcut repository. Я ссылаюсь на это, чтобы спросить, есть ли способ зарегистрировать ярлык для Capslock так же, как это делает Шпаковский в своем репозитории?Поймать пресс-капсулу в приложении для какао

Похоже, что я не могу зарегистрировать 0xffff (Key Codes, это Capslock) как действительный ярлык. Даже если я объединю его с клавишами-модификаторами. Я также хочу поймать прессу, пока она не переключит функциональность Capslock в системе.

Я знаю, что могу прослушивать все нажатия клавиш и просто захватывать Capslock, когда это происходит, но я хочу избежать такого поведения, так как считаю, что это потенциально небезопасно, а также уменьшит общую производительность системы.

Редактировать: Я уже рассмотрел некоторые рабочие библиотеки C++/C# для Windows, которые реализуют эту функцию. Они, похоже, постоянно переопределяют флаг Capslock системы, который я нашел довольно странным. Я в основном с 2 проблемы здесь:

1. Как поймать прессу Capslock без нажатия клавиши слушателю все время

2. Как это сделать, не вызывая функциональные Capslock системы.

ответ

1

Одна из возможных может заключаться в том, чтобы перезаписать sendEvent: в вашем NSApplicationdelegate. От Apples documentation:

Вы редко вызывать SendEvent: непосредственно, хотя вы можете переопределить этот метод, чтобы выполнить какое-либо действие на каждое событие. sendEvent: сообщения отправляются из основного цикла событий (метод запуска). SendEvent: это метод, который отправляет события в соответствующие респондеров-NSApp обрабатывает события приложения, объект NSWindow указано в записи событий обрабатывает события связанные с окном, и мыши и ключевые события направляются к соответствующему объекту NSWindow для дальнейшая отправка.

Вы можете оценить, нажата ли нажата клавиша модификатора, и действовать на это.

Edit:

Для фоновой обработки Quartz event taps может быть использован. Если это приведет к отказу, я не знаю.

+0

Если я сделаю это, я буду в опасности быть отвергнутым как потенциальный «регистратор ключей», так как я смотрю на каждое нажатие клавиши? Будет ли это также вызываться, если приложение не находится в фокусе/в фоновом режиме? –

+1

Я не думаю, что это вызовет проблемы с App Store. Подклассификация sendEvent: сама по себе не запрещена. Тем не менее, он будет вызван только тогда, когда ваше приложение сосредоточится. – Volker

+0

Я был отклонен гораздо меньше, чем это. ;-) Мне нужна реализация, которая работает, когда приложение находится в фоновом режиме. :( –

Смежные вопросы