今回のプログラムの解説
今回紹介したプログラムだが、先頭部分は、Win32APIの呼出をC#のプログラムで定義している。PowerShellでは、こうやって文字列としてC#のプログラムを入れて、それを21行目にある「Add-Type $src」のようにAdd-Typeコマンドで登録すると、C#プログラムをコンパイルして登録してくれる。回りの「try { ~ } catch {}」は、エラーのトラップである。
ここでは、2つのWin32APIを登録している。
●GetForegroundWindow function
https://docs.microsoft.com/ja-jp/windows/win32/api/winuser/nf-winuser-getforegroundwindow
●DwmGetWindowAttribute function
https://docs.microsoft.com/ja-jp/windows/win32/api/dwmapi/nf-dwmapi-dwmgetwindowattribute
「GetForegroundWindow」は、カレントウィンドウのウィンドウハンドルを返す関数だ。これに対して「DwmGetWindowAttribute」は、ウィンドウの左上と右下の座標を返すための関数。以前のWindowsでは、ウィンドウの座標は「GetWindowRect」で求めるものだったが、Windows 10/11では、この関数はウィンドウ周囲の影の部分を含んだ座標を返す。なので、これでキャプチャーしてしまうと、ウィンドウの外側まで入る。
「DwmGetWindowAttribute」は、さまざまな情報を返す関数なのだが、そのうちの1つに影の部分を含まないウィンドウの座標を返すという機能がある。ただし、呼びだし方が面倒なので、ここでは、「GetWRect」というメソッドを定義し、PowerShellからは、これを呼び出す。具体的には、
[WindowRect]::GetWRect($hWnd)
とする。
PowerShellの「Get-WindowCaptureByHandle」関数(27行目)で、この関数を使い、ウィンドウハンドルから、ウィンドウの左上、右上の座標を得て、「Get-CaptureRect」関数(22行目)を呼び出している。
「Get-CaptureRect」関数は、前々回に解説した範囲を指定してデスクトップの一部をキャプチャーする関数だ。その範囲としてウィンドウの範囲を入れてやることで、ウィンドウだけの画像を得ることができる。
「GetForegroundWindow」は、カレントウィンドウのウィンドウハンドルを返す。具体的には、
[WindowRect]::GetForegroundWindow()
とする(リスト37行目)。ウィンドウハンドルが得られれば、「Get-WindowCaptureByHandle」関数を使って、ウィンドウのキャプチャーができる。
サンプルの関数、「Save-CurrentWindowCapture」は、これを利用したもの。キャプチャーから保存、ビットマップの後始末までの一連の手順を記述してある。
やむを得ず、今回はプログラムの話になってしまったが、ここで定義した関数などを使うことで、デスクトップ内の特定の範囲やウィンドウハンドルで指定したウィンドウのキャプチャーが可能になる。もともと、このプログラムは、デバッグ用に画面を撮影し続けるために作成したもので、エラー処理などまったくしていない。実用にはほど遠いので、必要に応じて書き換えて使っていただきたい。また、ご自身のリスクで利用してほしい。何かあっても筆者も編集部も責任を取ることはできない旨、理解されたい。

この連載の記事
-
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? -
第507回
PC
Windows 11の「開発者モード」とは何か? -
第506回
PC
Windows 11は早くも来秋登場の26H2プレビューの準備が始まる -
第505回
PC
結構変化しているWindows 11のエクスプローラーの基本設定を見直す -
第504回
PC
新しいOutlookとOutlook Classic、そろそろ古いOutlookとExchangeの組み合わせは引退の頃合いか -
第503回
PC
機能が増えたこともあり、寄せ集めから統合化に進むWindowsの便利ツール「PowerToys」 -
第502回
PC
Windows 11でBluetoothのオーディオ新規格「Bluetooth LE Audio」を試す -
第501回
PC
Windows 11 Ver.25H2での変更点、新機能を整理する -
第500回
PC
Windows 11 Ver.25H2が完成した -
第499回
PC
Windowsでの致命的だが回復可能なエラーに備える手段を2つ紹介 -
第498回
PC
Windows Terminalの安定版V1.23が公開 設定UIが改良される - この連載の一覧へ











