我有一个登录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()似乎并没有真正起作用。有人对此有任何意见吗?

最佳答案

您需要确保该应用程序是前景窗口。 PowerShell Community Extensions有一个Set-ForegroundWindow cmdlet可以帮助您:

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}')

这是使用PowerShell V2的Add-Type cmdlet。还请注意,.NET中提供了SendKeys。

08-08 02:13