« スクリプトからコンソールウィンドウの「すべて選択」「コピー」「貼り付け」 | トップページ | PowerShellの.PS1ファイルの関連付け(その4) »

2007年8月 9日 (木)

PowerShellで、自分のコンソールウィンドウを最小化、最大化、元に戻す。

PowerShellで、Win32APIのSendMessage()を使う方法もありますが、ここでは、Win32APIを使わない方法で。

$process=[System.Diagnostics.Process]::GetCurrentProcess()
$hwnd=$process.MainWindowHandle
if($hwnd -eq 0){
  $title=$Host.UI.RawUI.WindowTitle
  $Host.UI.RawUI.WindowTitle+=(new-object random).next()
  $process=ps|where {$_.MainWindowTitle -eq $Host.UI.RawUI.WindowTitle}
  $Host.UI.RawUI.WindowTitle=$title
  $hwnd=$process.MainWindowHandle
}
$WM_SYSCOMMAND=274
$SC_MINIMIZE=61472
$SC_MAXIMIZE=61488
$SC_RESTORE=61728
if($hwnd){
  [void] [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
  $message=[System.Windows.Forms.Message]::Create($hwnd,$WM_SYSCOMMAND,$SC_MINIMIZE,0)
  $nativeWindow=new-object System.Windows.Forms.NativeWindow
  $nativeWindow.DefWndProc([ref]$message)
  $nativeWindow=$null
}

これで、一応、動きますが、これで良いのか、悪いのか。。。

« スクリプトからコンソールウィンドウの「すべて選択」「コピー」「貼り付け」 | トップページ | PowerShellの.PS1ファイルの関連付け(その4) »