2009-12-15 90 views
0

我有一個登錄PowerShell腳本。作爲腳本的一部分,它啓動一個應用程序,然後等待4秒鐘等待計算機趕上,然後發送一些擊鍵。powershell,sendkey()和appactive()束縛

$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()似乎並沒有真正的工作。有沒有人對此有任何意見?

回答

0

聲音像焦點被從活動應用程序帶走,不能返回,可能是因爲點擊的目標是模式(閃屏等)。無論如何,通過管道或標準輸入將數據流發送到應用程序?

+0

這是其他程序正在加載,但它沒有鼠標點擊(到桌面)工作正常。 AFAIK sendkeys()是唯一的原因,發送輸入不使用第三方powerpaks等。 – falkaholic 2009-12-16 00:01:38

+1

你寫你的應用程序自己調用?如果是這樣,你有很多選擇,如果沒有,還有一些。根據應用的類型,它可能會或可能不會接受命令行參數,允許重定向控制檯輸入(StdIn,StdOut)和我們的支持直接DDE。 – GrayWizardx 2009-12-16 01:18:27

5

您需要確保App是前臺窗口。該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的添加型cmdlet的。另請注意,SendKeys在.NET中可用。