Отправить нажатие клавиши в окно не на переднем плане - PullRequest
0 голосов
/ 18 ноября 2011

Согласно этой статье на MSDN, можно установить конкретное окно в качестве окна переднего плана, и затем отправить ему нажатия клавиш ... но мне нужно отправлять нажатия клавишк окну в фоновом режиме, так что все, что делает пользователь, может продолжаться непрерывно.

Ответы [ 4 ]

0 голосов
/ 19 ноября 2011

Техника, которую я использовал в Windows Mobile / CE, состоит в том, чтобы подключить клавиатуру, а затем просто использовать PostMessage(), чтобы отправить их в целевое окно для обработки в обычном режиме. Эта техника также должна работать на рабочем столе. В Code Project есть несколько примеров подключения клавиатуры - http://www.codeproject.com/KB/system/globalsystemhook.aspx. Ваш вопрос не был ясным, было ли окно переднего плана частью вашего приложения или нет. Если это так, не могли бы вы просто подписаться на одно из ключевых событий формы переднего плана из фоновой формы?

0 голосов
/ 18 ноября 2011

Так в основном слушатель нажатия клавиш? В Java есть класс робота, который прослушивает нажатия клавиш и может воздействовать на них (например, я набираю «Hello World», и класс автоматически записывает это в файл или другое окно).

Я создал нечто подобное в прошлом. Вы можете создать Java-программу для запуска в фоновом режиме в постоянном цикле while и просто слушать нажатия клавиш. Установите программу для записи каждого нажатия клавиши в файл или определенное место. Поскольку это короткий цикл, который реагирует только при нажатии клавиши, он практически не потребляет вычислительной мощности и не влияет на производительность программы на переднем плане.

0 голосов
/ 18 ноября 2011

Я делаю это с помощью сочетаний клавиш. У меня есть приложение, которое имеет несколько дочерних окон вдоль стороны. Главное окно включает свойство Form.KeyPreview дочерних окон, а затем регистрируется для соответствующего события (KeyPress, KeyDown или KeyUp) в этом дочернем окне. При такой настройке главное окно может обрабатывать все ключи от дочерних окон.

0 голосов
/ 18 ноября 2011

Может быть, вам следует просто зафиксировать нажатия клавиш в окне переднего плана и передать их в фоновое окно (делегат). Или, если они несколько сложны, вы можете использовать глобальные горячие клавиши. В любом случае, передача ключей из формы переднего плана в фоновую форму должна быть лучшим решением.

Я нашел хороший пример, он не о горячих клавишах, но концепция должна применяться и в вашем случае.

http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx

...