在 powershell 中聚焦 IE 窗口

在 powershell 中聚焦 IE 窗口

我的代码:

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

但是全屏后,窗口仍然出现在后面Windows 任务栏。当我单击窗口使其聚焦时,任务栏会落后,并且会按我想要的方式显示。我该如何以编程方式做到这一点?谢谢!

答案1

我创建了一个Open-InternetExplorer函数,它可以创建一个 IE COM 对象、导航到一个 URL、将 IE 设置为前台窗口,并且可以选择全屏显示。

需要注意的是,-InForeground使用 switch 时会调用本机设置前台窗口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

相关内容