Фокус окна IE в powershell [закрыто]

мой код:

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

однако после полноэкранного режима окно все равно появляется за панель задач Windows. Когда я нажимаю окно, чтобы дать ему фокус, панель задач отстает, и она появляется так, как я хочу. Как я могу сделать это программно? Спасибо!

11
задан GiantDuck
02.12.2022 2:47 Количество просмотров материала 3069
Распечатать страницу

1 ответ

Я создал Open-InternetExplorer функция, которая создает объект IE COM, переходит к URL, устанавливает IE в качестве окна переднего плана, и, возможно, полный экран.

следует отметить, что когда -InForeground используется переключатель вызов native SetForegroundWindow Win32 API. В некоторых ситуациях эта функция не изменяет окно переднего плана. Эти ситуации описаны в документации MSDN для функция.

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
}

пока скрипт должна работать, есть некоторые потенциальные проблемы в связи с менеджментом ресурсов.

Я не уверен, Нужно ли мне делать что-то конкретное в отношении возврата COM-объекта. Вполне возможно, что .NET или PowerShell справляется с этим самостоятельно, но если нет, существует вероятность утечки ресурсов.

Я также не уверен, что я должен делать (если что-нибудь) в отношении убедившись, что InternetExplorer.HWND действительно до перешел в SetForegroundWindow


Пример Использования:
. .\Open-InternetExplorer.ps1
Open-InternetExplorer -Url www.example.com -FullScreen -InForeground
1
отвечен Crippledsmurf 2022-12-03 10:35

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

internet-explorer
powershell
taskbar
windows
windows-8
Вверх