Переключение приложений с помощью глобальной горячей клавиши в Windows Mobile 6.1 / 6.5 - PullRequest
0 голосов
/ 09 мая 2011

Я работаю над написанием приложения, которое пересекает грань между C # и C / ++ в Windows Mobile 6.1 / 6.5.В настоящее время на наших устройствах запущено приложение киоска, и мы хотели бы добавить возможность переключаться назад и вперед ко второму приложению киоска.

Наша цель - создать глобальную горячую клавишу, которая переключает окна процесса (аналогичнок тому, что alt + tab работает) всякий раз, когда она нажата.У нас уже есть оба приложения, и я написал некоторый код, который переключает процессы, но у меня не хватает времени, чтобы заставить работать глобальную горячую клавишу проекта.

Из всего прочитанного мною чтенияНасколько я понимаю, лучший способ отслеживания нажатий клавиш - подключить к насосу системных сообщений функцию SetWindowsHookEx в coredll.dll .К сожалению, я также читал, что эта функция технически не поддерживается на платформе.

Я также нашел несколько учебных пособий, в которых предлагалось использовать карту сообщений с макросами ON_WM_KEYUP / ON_WM_KEYDOWN в среде MFC, но не смог найти никакой документации, относящейся к Windows Mobile.Когда я пытался использовать документацию здесь , мое устройство продолжало зависать.

Существует ли общепринятая лучшая практика для установки какого-либо глобального ключевого хука на платформе?Если нет, то есть ли что-нибудь, что хотя бы технически поддерживается?

Заранее спасибо.

ReplyQuote

Ответы [ 3 ]

0 голосов
/ 16 мая 2011

Мы фактически опрашивали функцию GetAsyncKeyState в coredll.dll в отдельном потоке.Поток отслеживает определенную клавишу и генерирует событие при каждом нажатии.

Поскольку событие выполняется в потоке опроса ключей, вы должны быть уверены, что используете делегат для вызова его обработчика в потоке GUI при возникновении события.

0 голосов
/ 16 мая 2011

Я бы пошел на зацепку за клавиатуру, но только если бы RegisterHotKey не работал для вашего конкретного сценария.

Из всего прочитанного мной я понимаю, что лучшимЧтобы отслеживать нажатия клавиш, подключайтесь к насосу системных сообщений с помощью функции SetWindowsHookEx в coredll.dll.К сожалению, я также читал, что эта функция технически не поддерживается на платформе.

Технически не поддерживается, это правильно в теории, но я не видел устройства WM 6.5. *, Котороене поддержал это в реальности.Перехват клавиатуры - настолько важная особенность пользовательских приложений WM-устройств для вертикального рынка, которые, я думаю, просто невозможно удалить из-за обратной совместимости.

Корпоративная сторона пространства WM слишком важна.

0 голосов
/ 10 мая 2011

Почему бы не использовать RegisterHotKey вызов и использовать его для обмена приложениями? IIRC аппаратные кнопки обычно отображаются на коды клавиш, начинающиеся с 0xC1 (193).

...