Handling a popup box using powershell

2020-05-07 05:16发布

问题:

Can anyone please tell me how to click on "ok" or "cancel" on a popup window using powershell? I am trying to automate a website using powershell, but I am new to powershell. I have to click on OK button in a popup box to proceed. I know VBscript, in that I can use

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

Can anyone tell me how to do the same in powershell? If i can somehow access the popup window, atleast i can use sendkeys command to send the enter key. Please let me know how to handle the popup window. Thanks in advance.

回答1:

With Powershell v2 you can use PInvoke to access the normal Win32 API, thus giving you access to FindWindow and SetForegroundWindow. Then use SendKeys to send a Enter key.

Something like this to register the methods:

$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

Now you can find the window you need:

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

Give it focus:

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

And send the Enter key:

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

Sources/inspiration:

  • power shell : how to send middle mouse click?
  • http://poshcode.org/1837
  • http://www.tek-tips.com/viewthread.cfm?qid=1563429


回答2:

You might want to investige the WASP snapin from CodePlex:

http://wasp.codeplex.com/wikipage?title=Some%20Usage%20Examples&referringTitle=Home



回答3:

Try something like this:

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