2013-04-15 3 views
0

Может ли кто-нибудь сказать мне, как нажать «ok» или «отменить» во всплывающем окне с помощью powershell? Я пытаюсь автоматизировать веб-сайт с помощью powershell, но я новичок в powershell. Я должен нажать кнопку ОК во всплывающем окне, чтобы продолжить. Я знаю, VBScript, в том, что я могу использоватьОбработка всплывающего окна с помощью powershell

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

С Powershell v2 можно использовать PInvoke для доступа к нормальной Win32 API, что дает вам доступ к FindWindow и SetForegroundWindow. Затем используйте 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}") 

Источники/вдохновение:

Смежные вопросы