@DmitryRandom
инженер-электронщик-программист

Как отправить команду пользовательского интерфейса в [любой] процесс Windows?

Поиском в Сети и здесь найти не удалось, но точно знаю, что на WinXP такое реально работало. Был давно некий "пиратский" сайт обновлений баз ESET NOD. С него можно было запустить пакетный файл, который делал необходимые настройки антивируса. Это выглядело, как будто кто-то очень быстро выбирает пункты в окне настроек NOD, вводит текст в полях, нажимает кнопки.
  • Вопрос задан
  • 461 просмотр
Решения вопроса 1
@DmitryRandom Автор вопроса
инженер-электронщик-программист
Нашёл решение без использования сторонних программ (для GUI WinAPI). Это системное средство автоматизации от Microsoft, имеющееся в Windows — PowerShell.

Вот демонстрационный пример эмуляции ввода с клавиатуры, в котором в работающем Калькуляторе (старая версия MS от 2004 года) включается Инженерный вид и вычисляется арксинус от 0,5 (результат — 30 градусов).

файл test.ps1
$wshell = New-Object -ComObject wscript.shell;
Sleep 1
$wshell.AppActivate('Калькулятор Плюс')
Sleep 1
$wshell.SendKeys("%")
Sleep 1
$wshell.SendKeys("{RIGHT}")
Sleep 1
$wshell.SendKeys("{DOWN}")
Sleep 1
$wshell.SendKeys("{DOWN}")
Sleep 1
$wshell.SendKeys("{ENTER}")
Sleep 1
$wshell.SendKeys(".5")
Sleep 1
$wshell.SendKeys("is")
Sleep 9

Для запуска неподписанного скрипта надо запустить PowerShell с ключом отключения проверки подписи (можно сделать пакетный файл):
PowerShell.exe -ExecutionPolicy Bypass -File test.ps1

Аналогично можно сделать управление мышью.

Источники:
Эмуляция нажатия клавиш в PowerShell
Отключение запрета выполнения скриптов в PowerShell
Перемещение мыши в PowerShell
Перемещение и нажатие кнопок мыши в PowerShell
Кликание в конкретные объекты в PowerShell
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@kalapanga
AutoIt ?
Ответ написан
Комментировать
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
То, что вы ищете называется "отправка сообщения окну" и "эмуляция пользовательского ввода". Сегодня обрело популярность создавать GUI для приложений с использованием сторонних решений вместо стандартного системного WinAPI для создания окон. Если GUI создан с помощью системного WinAPI - то методика остается без изменений: системное WinAPI дает полный контроль над всеми окнами в системе для всех приложений плюс эмуляция ввода там, где нельзя сделать через WinAPI. Если же нет - то остается только эмуляция пользовательского ввода с паузами на отрисовку интерфейса либо сканированием изображения на экране. Узнать легко - использовать WinSpy либо InqSoft Window Scanner. Кроме упомянутого AutoIt, еще есть nnCron и автоматизатор Sign 0f Misery от того же InqSoft (да, древность, но все еще работающая, ибо системное апи окошек все еще легаси и будет еще долго жить).
Ответ написан
Комментировать
Isafu
@Isafu
Для такого необходимо знать как работает целевая программа, изучить её код с помощью специальных утилит (не всегда можно его получить), чтобы такое делать необходимо потратить не один день, проще эмулировать действия пользователя с помощью AutoIt, конкретно в вашем случае это сделано с помощью него
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы