私のコード:
$ie = new-object -com "InternetExplorer.Application"
$ie.navigate("http://localhost")
$ie.visible = $true
$ie.fullscreen = $true
ただし、全画面表示後もウィンドウは表示されますbehind Windowsタスクバー。ウィンドウをクリックしてフォーカスを合わせると、タスクバーが遅れて表示されます。これをプログラムで行うにはどうすればよいですか?ありがとうございました!
IE COMオブジェクトを作成し、URLに移動し、IEをフォアグラウンドウィンドウとして設定し、オプションでフルスクリーンにするOpen-InternetExplorer
関数を作成しました。
-InForeground
スイッチが使用されると、ネイティブ SetForegroundWindow Win32APIが呼び出されることに注意してください。この関数がフォアグラウンドウィンドウを変更しない状況がいくつかあります。これらの状況は、関数の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のいずれかがこれ自体を処理する可能性がありますが、そうでない場合は、リソースリークの可能性があります。
また、SetForegroundWindow
に渡される前にInternetExplorer.HWND
が有効であることを確認することに関して、(もしあれば)何をすべきかわかりません。
. .\Open-InternetExplorer.ps1
Open-InternetExplorer -Url www.example.com -FullScreen -InForeground