Отправить нажатие клавиши в окно без переднего плана

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

4 ответа

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

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

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

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

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

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

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

Другие вопросы по тегам