Foca a janela do IE no powershell [fechado]

2

Meu código:

$ie = new-object -com "InternetExplorer.Application"
$ie.navigate("http://localhost")
$ie.visible = $true
$ie.fullscreen = $true

No entanto, após a tela cheia, a janela ainda aparece atrás da barra de tarefas do Windows. Quando clico na janela para focar, a barra de tarefas fica para trás e aparece como eu quero. Como posso fazer isso de forma programática? Obrigada!

    
por GiantDuck 03.12.2014 / 22:01

1 resposta

1

Eu criei uma função Open-InternetExplorer que cria um objeto COM do IE, navega para um URL, define o IE como a janela de primeiro plano e, opcionalmente, em tela cheia.

Deve-se observar que quando a opção -InForeground é usada, uma chamada é feita para o nativo SetForegroundWindow API do Win32. Existem algumas situações em que essa função não altera a janela de primeiro plano. Essas situações são descritas na documentação do MSDN para a função.

function Add-NativeHelperType
{
    $nativeHelperTypeDefinition =
    @"
    using System;
    using System.Runtime.InteropServices;

    public static class NativeHelper
        {
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool SetForegroundWindow(IntPtr hWnd);

        public static bool SetForeground(IntPtr windowHandle)
        {
           return NativeHelper.SetForegroundWindow(windowHandle);
        }

    }
"@
if(-not ([System.Management.Automation.PSTypeName] "NativeHelper").Type)
    {
        Add-Type -TypeDefinition $nativeHelperTypeDefinition
    }
}

function Open-InternetExplorer
{
    Param
    (
        [Parameter(Mandatory=$true)]
        [string] $Url,
        [switch] $InForeground,
        [switch] $FullScreen
    )
    if($InForeground)
    {
        Add-NativeHelperType
    }

    $internetExplorer = new-object -com "InternetExplorer.Application"
    $internetExplorer.navigate($Url)
    $internetExplorer.Visible = $true
    $internetExplorer.FullScreen = $FullScreen
    if($InForeground)
    {
        [NativeHelper]::SetForeground($internetExplorer.HWND)
    }
    return $internetExplorer
}

Embora o script fornecido deva funcionar, existem alguns possíveis problemas em relação ao gerenciamento de recursos.

Não tenho certeza se preciso fazer algo específico em relação ao retorno do objeto COM. É possível que o .NET ou o PowerShell lidem com isso, mas se não, existe a possibilidade de um vazamento de recursos.

Eu também não tenho certeza do que devo fazer (se houver) em relação a garantir que InternetExplorer.HWND seja válido antes de ser passado para SetForegroundWindow

Exemplo de uso:
. .\Open-InternetExplorer.ps1
Open-InternetExplorer -Url www.example.com -FullScreen -InForeground
    
por 04.12.2014 / 01:44