Как отправлять ввод с клавиатуры только в определенное приложение

#powershell #automation

Вопрос:

Я очень новичок в Powershell. Я написал простой сценарий, в основном для автоматизации шлифования в видеоигре, когда я нахожусь вдали от своего компьютера. Я хотел знать, есть ли способ вместо этого «нацелить» нажатие кнопки на определенное окно/приложение/и т. Д., Все еще работая на той же машине в других окнах. Как бы то ни было, я должен сфокусировать игровое окно, чтобы скрипт работал, так что это действительно полезно, только если я АФК. Но если бы я мог запустить его в фоновом режиме, работая над другими вещами, которые были бы полезны.

 $WShell = New-Object -Com Wscript.Shell while (1) {sleep 1; [System.Windows.Forms.SendKeys]::SendWait("{LEFT}"*80);  [System.Windows.Forms.SendKeys]::SendWait("{RIGHT}"*80);sleep 1;  [System.Windows.Forms.SendKeys]::SendWait("{C}"*20)}  

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

Ответ №1:

Подумайте о том, что вы сейчас делаете. . .это почти то же самое, что завязывать шнурки на паре ботинок, просто чтобы надеть другие;) Вы не используете $wShell нигде в своем сценарии.

… но ты уже почти на месте. Мы можем начать с загрузки необходимых сборок, а затем указать на приложение, с которым вы хотите взаимодействовать:

 Add-Type -AssemblyName Microsoft.VisualBasic Add-Type -AssemblyName System.Windows.Forms  [Microsoft.VisualBasic.Interaction]::AppActivate('Notepad') Start-Sleep -Milliseconds 1000  [System.Windows.Forms.SendKeys]::SendWait("H") Start-Sleep -Milliseconds 100 [System.Windows.Forms.SendKeys]::SendWait("E") Start-Sleep -Milliseconds 100 [System.Windows.Forms.SendKeys]::SendWait("L") Start-Sleep -Milliseconds 100 [System.Windows.Forms.SendKeys]::SendWait("L") Start-Sleep -Milliseconds 100 [System.Windows.Forms.SendKeys]::SendWait("O")  

Обратите внимание на блокнот [Microsoft.VisualBasic.Interaction]::AppActivate('Notepad') , так как это будет та программа, с которой вы пытаетесь взаимодействовать. В этом случае вы просто отправляете «ПРИВЕТ» в блокнот, который уже запущен.

Комментарии:

1. Это довольно близко к тому, что я ищу, но все еще остается проблема сохранения нажатий клавиш только для приложения в «AppActivate». Если я выберусь из этого конкретного приложения и перейду в другое, чтобы работать в другом месте, нажатия клавиш продолжатся в новом приложении, а не в активированном. Я надеюсь, что приложение в AppActivate будет получать нажатия клавиш в фоновом режиме, пока я работаю в другом окне. К сожалению, этого не происходит. Есть ли что-то, что я мог бы добавить в » [Система. Windows. Формы. SendKeys]::SendWait(«H»)’, чтобы направить его только в определенное приложение?

2. Являются ли окна, которые вы переключаете, одним и тем же приложением?

3. Нет, это были бы такие вещи, как Word, Chrome и т. Д. У меня есть только одно приложение, для запуска которого я буду отправлять ключи одновременно.

4. @Abraham Спасибо за это! Это помогает мне выполнить псевдо-бесшумную установку для программы, в которой нет встроенных беззвучных параметров