Прямой доступ к событиям клавиатуры в OSX - PullRequest
8 голосов
/ 03 февраля 2009

Я ищу доступ всего приложения к необработанным событиям клавиатуры в OS X, либо с использованием каркасов Cocoa или Carbon (или любого из базовых API, если на то пошло). Я знаю, что могу переопределить sendEvent NSApplication: получить необработанную информацию о клавиатуре, но мета-клавиши (команда, управление, альтернатива, сдвиг и т. Д.) Не отображаются как события нажатия клавиш. Я ищу что-то аналогичное инфраструктуре Microsoft DirectInput.

Спасибо!

Ответы [ 4 ]

10 голосов
/ 03 февраля 2009

Я думаю, что эквивалентом DirectInput является HID Manager. HID означает «устройство интерфейса пользователя», а HID Manager (иногда называемый HIDLib) - это низкоуровневый API для HID: клавиатур, мышей и джойстиков.

Leopard получил новый API HID Manager, описанный в Техническом примечании TN2187 . API до Leopard документирован в Руководство по интерфейсу устройства класса HID . Я написал оболочку Objecive-C для старых API, DDHidLib , которая может оказаться вам полезной. Leopard API приятнее на * . Я бы использовал это напрямую, если вы можете.

5 голосов
/ 03 февраля 2009

Платформа Core Graphics также имеет некоторые полезные функциональные возможности, скрытые в ней как часть удаленной операционной системы. Найдите CGRemoteOperation.h и посмотрите ссылку Quartz Events .

Вы можете использовать систему Quartz Events для установки специфичных для приложения или общесистемных «отводов событий», которые позволяют отслеживать и вводить события клавиатуры и мыши на довольно низком уровне. Несколько лет назад были некоторые ошибки, связанные с событиями, специфичными для приложения, но они, надеюсь, уже исправлены.

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

3 голосов
/ 29 декабря 2009

NSResponder производные классы имеют метод -(void)flagsChanged: он вызывается при удержании мета-ключей.

1 голос
/ 03 февраля 2009

Вы можете использовать функцию RegisterHotKeyEvent Carbon, хотя я не уверен, что вы можете явно зарегистрировать любой из мета-ключей.

Сообщение в блоге Программа Global Hotkeys in Cocoa Easyly объясняет, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...