Имитировать перемещение мыши / щелчок / нажатие клавиши в приложении, которое не активно
Вопрос
Я знаю, как имитировать события мыши и клавиатуры, но они действуют так, как если бы их создал пользователь, поэтому они повлияют на активное окно.Что мне нужно, так это смоделировать один из этих входных данных, но в окне, которое не активно.
Я не говорю, что он сведен к минимуму, представьте, например, что у вас есть MSPaint и notepad.Блокнот лежит перед краской.И вы хотите имитировать щелчки мыши в определенных координатах окна paint, но без установки его активным, что позволит пользователю продолжать использовать блокнот, который находится рядом с paint.
Возможно ли это вообще?Спасибо!
Решение
Вы могли бы сделать следующее:
1) получить HWND
окна, внутри которого вы хотите смоделировать события.Для того чтобы сделать это, вы можете использовать FindWindow
функция, которая принимает два параметра, одним из которых является имя класса window (вы можете использовать NULL
), а другой - название окна (подробности см. В документации MSDN).;
2) отправьте сообщение в нужное окно, используя SendMessage
функция.Параметрами являются:предыдущий полученный дескриптор окна (HWND
), сообщение (которое может быть, например WM_KEYDOWN
, или WM_MOUSEMOVE
, WM_LBUTTONDOWN
и т.д.), то WPARAM
сообщения (которое в случае WM_KEYDOWN
является виртуальным ключевым кодом ключа) и, наконец, LPARAM
сообщения (которое в случае WM_KEYDOWN
является довольно сложным, и вам следует проверить MSDN для получения подробной информации).
На мой взгляд, этого достаточно для того, что вы намерены сделать.
Другие советы
Ну, если бы вы знали JAVA, вы могли бы использовать класс robots.
Этот класс используется для генерации собственных системных событий ввода в целях автоматизации тестирования, автономных демонстраций и других приложений, где требуется управление мышью и клавиатурой
Может быть, в .net есть что-то похожее?