使用PowerShell处理弹出框

时间:2013-04-15 13:58:06

标签: shell powershell popup automation

任何人都可以告诉我如何使用PowerShell在弹出窗口中单击“确定”或“取消”? 我正在尝试使用PowerShell自动化网站,但我是PowerShell的新手。我必须在弹出框中单击“确定”按钮才能继续。我知道VBscript,因为我可以使用

set obj0 = createobject("wscript.shell")
count = 0
do while count = 0
if obj0.appactivate "Popupboxname" then
----perform required action---
count = 1
else
wscript.sleep(2000)
end if
loop

有谁能告诉我如何在powershell中做同样的事情?如果我能以某种方式访问​​弹出窗口,至少我可以使用sendkeys命令发送回车键。请让我知道如何处理弹出窗口。提前谢谢。

3 个答案:

答案 0 :(得分:3)

使用Powershell v2,您可以使用PInvoke访问常规的Win32 API,从而可以访问FindWindowSetForegroundWindow。然后使用SendKeys发送Enter密钥。

这样的事情来注册方法:

$pinvokes = @'
    [DllImport("user32.dll", CharSet=CharSet.Auto)]
    public static extern IntPtr FindWindow(string className, string windowName);

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool SetForegroundWindow(IntPtr hWnd);
'@

Add-Type -AssemblyName System.Windows.Forms
Add-Type -MemberDefinition $pinvokes -Name NativeMethods -Namespace MyUtils

现在您可以找到所需的窗口:

$hwnd = [MyUtils.NativeMethods]::FindWindow(null, "Popupboxname")

重点关注:

[MyUtils.NativeMethods]::SetForegroundWindow($hwnd)

并发送Enter密钥:

[System.Windows.Forms.SendKeys]::SendWait("{ENTER}")

来源/灵感:

答案 1 :(得分:0)

答案 2 :(得分:0)

尝试这样的事情:

$wshell = New-Object -ComObject wscript.shell; 
$wshell.AppActivate('Vector RP1210 API Setup') 
Sleep 1 
$wshell.SendKeys('%C')
$wshell.AppActivate('Vector RP1210 API') 
Sleep 1 
$wshell.SendKeys('{ENTER}')