PowerShellを使ってクリップボードに入ったイメージをファイルに保存

2 min read読了の目安(約2200字

はじめに

たまに、PCの画面のキャプチャを取りたいときに
「ぷりんとスクリーン押して」-> 「ペイントにはりつけて」・・・
ということをやったりしていました。
探すと、便利なツールなどもあるのですがお勉強のために
PowerShellで自動で画像に保存するスクリプトを書いてみます。

やりたいこと

やりたいことは以下。

画面のキャプチャをとったら、画像で保存。ファイル名は 000.png , 001.png , 002.png ... とする

PowerShellでクリップボードの情報を取得

Get-Clipboardでクリップボードの情報が取得出来ます。
ドキュメントを見たいときはプロンプトから以下のように入力します。

> get-help Get-Clipboard -Online

とやると、ブラウザでドキュメントが開きます
サンプルも結構書いてあるので、とても参考になります。

今回は画像がクリップボードに入ったときだけ情報を取得したいので以下のようにします

> Get-Clipboard -Format Image

画面をキャプチャしたじょうたいで上記コマンドを入力すると以下のように
出力されるかと思います。

> Get-Clipboard -Format Image
Tag                  :
PhysicalDimension    : {Width=1920, Height=1080}
Size                 : {Width=1920, Height=1080}
Width                : 1920
Height               : 1080
HorizontalResolution : 96
VerticalResolution   : 96
Flags                : 335888
RawFormat            : [ImageFormat: 省略]
PixelFormat          : Format32bppRgb
Palette              : System.Drawing.Imaging.ColorPalette
FrameDimensionsList  : {省略}
PropertyIdList       : {}
PropertyItems        : {}

クリップボードから画像に保存

まずは、プロンプト上からクリップボードから画像の取得、保存をしてみましょう。
以下のように2行で出来ます。
Save以降の保存先のパスは環境に合わせて変えてください。

> $Image = Get-Clipboard -Format Image
> $Image.Save("D:\powershell\sample001.png")

キャプチャするたびに保存するようにする

以下のようなスクリプトを書いてみました。

$N = 0
while(1)
{
    $Image = Get-Clipboard -Format Image # クリップボードから画像取得

    # 画像が取れたら保存
    if($Image){
        $STRNUM =  "{0:d3}" -f $N
        $Image.Save("D:\powershell\$($STRNUM).png")
        $N = $N + 1
        Set-Clipboard # クリップボードの中身をクリア
    }
}

とくに難しいことはやっていないかと思います。
画像保存後、クリップボードの情報を削除するためにSet-Clipboardを引数なしで呼んでいますが、
他に方法があったりするのですかね。

ここでは PowerShell ISEから実行してみます。
PowerShell ISEを起動して、上記のスクリプトを書きます。

この状態で実行ボタンを押すと、
画面のキャプチャを取るたびに画像が保存されます。

まとめ

  • クリップボードの情報取得は Get-Clipboard で取れる
  • わからないことは Get-Help <コマンド名> -Onlineでヘルプを見る