Странность powershell, sendkey () и appactive () - PullRequest
0 голосов
/ 16 декабря 2009

У меня есть сценарий PowerShell для входа в систему. Как часть сценария, он запускает приложение, затем ждет 4 секунды, пока компьютер не догонит его, и посылает несколько нажатий клавиш.

$deviceID = "123xyz"
invoke-item ("C:\myapp")
...
$myshell = New-Object -com "Wscript.Shell"
start-sleep -s 4
$myshell.AppActivate("myapp");$myshell.sendkeys("1");$myshell.sendkeys("{TAB}");$myshell.sendkeys("$deviceID");$myshell.sendkeys("{ENTER}")

Отлично работает, если пользователь не щелкнет где-либо во время входа в систему. Если это так, приложение никогда не получает нажатие клавиш, и приложение мигает на панели задач.

Похоже, что AppActivate () не работает. У кого-нибудь есть что-нибудь по этому поводу?

Ответы [ 2 ]

7 голосов
/ 16 декабря 2009

Вы должны убедиться, что приложение находится в окне переднего плана. Расширения сообщества PowerShell имеют командлет Set-ForegroundWindow, который может помочь с этим:

Add-Type -AssemblyName System.Windows.Forms
$proc = Get-Process notepad
Set-ForegroundWindow $proc.MainWindowHandle
Start-Sleep -Seconds 2 # Just so you can see the window before it closes :-)
[Windows.Forms.SendKeys]::SendWait('%{F4}')

Используется командлет Add-Type PowerShell V2. Также обратите внимание, что SendKeys доступен в .NET.

0 голосов
/ 16 декабря 2009

Похоже, что фокус убирается из активного приложения и не может быть возвращен, возможно, потому, что цель кликов является модальной (заставка и т. Д.). Есть ли способ отправить поток данных в приложение через каналы или стандартный ввод?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...