キャプチャー範囲を指定する方法
上記の方法は、デスクトップ全体をキャプチャーするものだ。しかし、範囲を指定したいこともあるだろう。もし、キャプチャする範囲の座標がわかっているなら、前記のコマンドを一部変更して利用できる。たとえば「(100,200)-(300,500)」の範囲をキャプチャしたいのであれば、
$rect=[Drawing.Rectangle]::FromLTRB(100,200,300,500)
として範囲(Rectagleオブジェクト)を作る。次にビットマップを以下のように作成する。
$bmp=New-Object System.Drawing.Bitmap $rect.width,$rect.height
その後、
([System.Drawing.Graphics]::FromImage($bmp)).CopyFromscreen($rect.left,$rect.top,0,0,$bmp.size)
として実行する。あとは、同じように$bmpを保存すればよい。
しかし、自分でマウスを使って範囲を指定してキャプチャしたいこともあるだろう。この場合には「ms-screenclip:」をURI起動したのち、クリップボードを保存すればよい。具体的には、
start "ms-screenclip:"
$bmp=[System.Windows.Forms.Clipboard]::GetImage()
とすれば、$bmpにビットマップ画像が入る。あとは、同じ方法で画像を保存すればよい。1行目のこのURI起動は「Win+Shift+S」キーを押したのと同じもの。キーを押す操作をコマンドラインから起動するだけだ。実行後、デスクトップの上部にメニューが出て、ここで切り取る対象(矩形、自由形状、ウィンドウ、デスクトップ全体)を切り替えることができる。キャプチャーをするとPowerShell側に制御が戻る。
デスクトップのキャプチャーをコマンドラインからするのはそれほど難しいことでもない。ウィンドウのキャプチャーは、その位置やサイズが明らかなら今回紹介した「キャプチャ範囲を指定する方法」で可能だが、残念なことにWindows PowerShellには、ウィンドウの位置やサイズを調べるためのコマンドがない。このためWin32APIを呼び出す必要がある。決して難しくはないのだがコマンドラインというよりは、プログラムになってしまうため、いろいろと前提知識が必要になる。これについてはまた別の機会にさせていただきたい。
この連載の記事
-
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る -
第448回
PC
PowerShellで面倒なオブジェクトはPSCustomObjectに変換するのが早道 - この連載の一覧へ