PowerShellで最強の「スクリーンショット」を作ってみよう!

PowerShellで最強の「スクリーンショット」を作ってみよう!

GUIの電子機器が蔓延るこの令和の時代、
扱う情報も文字より画像が適する場面が増えているように感じます。
その表れとして、
「スクリーンショット」が老若男女問わず広く理解されてきています。
ひと昔前はPCを使いこなす人の小テクくらいの浸透具合だったかと思いますが、
今ではスマホを持ってるなら知ってて当然レベルの機能となっています。

そんなスクリーンショットを標準機能で満足するのは勿体ない!
というわけで、今回はPowerShellを利用して
ぼくのかんがえたさいきょうのスクリーンショットを作るという内容です。

簡単なスクリーンショット機能の作成方法

まずはシンプルな機能を作ってみましょう!
サクサクいけば10分程度で試せます!

①「Windows PowerShell ISE」を起動して、新規ファイルに下記のコードをコピペ。
※「Windows PowerShell ISE」はWindowsOSの標準機能です。

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# 仮想スクリーン全体の領域を取得
$vs = [System.Windows.Forms.SystemInformation]::VirtualScreen

# ビットマップを作成
$bmp = New-Object System.Drawing.Bitmap $vs.Width, $vs.Height

# スクリーン内容をコピー
$gfx = [System.Drawing.Graphics]::FromImage($bmp)
$gfx.CopyFromScreen($vs.X, $vs.Y, 0, 0, $vs.Size)

# 保存
$ts = Get-Date -Format yyyyMMdd_HHmmss
$path = "$env:USERPROFILE\Pictures\Screenshot_$ts.png"
if (-not (Test-Path $env:USERPROFILE\Pictures)) { New-Item "$env:USERPROFILE\Pictures" -ItemType Directory | Out-Null }
$bmp.Save($path, [System.Drawing.Imaging.ImageFormat]::Png)

[System.Windows.Forms.MessageBox]::Show("保存しました:`n$path", 'スクショ完了', 'OK', 'Information')

試しに実行ボタンを押してみて、スクショされることを確かめましょう。
もし上手くいかない場合は「実行ポリシーの変更」が必要かもしれません。
これについては検索&自己責任でお願いします。

②デスクトップ直下にショートカットを作成する。
 ・右クリック→新規作成/ショートカット→項目の場所(下記)と任意の名前を入力
   %windir%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy RemoteSigned -File “ps1ファイルのフルパス”
 ・右クリック→プロパティ→実行時の大きさを「最小化」、任意のショートカットキーを設定
 ・反映されなければエクスプローラーやPCの再起動

これでいつでも好きなキーでスクリーンショットを行うことができます。
ここから例えば、
完了メッセージを表示せずに音だけ鳴らしたり、
保存先を日付毎に分けるようにしたりして、
あなた好みの処理になるよう改造してみてください。

活用例

プログラム内でスクリーンショットを行うことで、
キャプチャの内容やタイミング、別処理を合わせて行う等、
個々の状況に合わせた機能を作り上げることができます。

例えば、
・ウインドウ毎のキャプチャを一括で取得する。
・毎日定時にキャプチャを取得しシステム監視に活用する。
・定間隔でキャプチャを取得しタイムラプス動画を作成する。
といった機能は便利そうですね。

全てをPowerShell内で完結させなくても、
画像解析系の別アプリと組み合わせることで
更にできることは広がりそうです。
AIと合わせるのも面白そうですね。

まとめ

当たり前な機能も、
アイデア次第でより一層便利になります。
溢れ出る想像力を存分に発揮して、
あなただけの快適なPCを作り上げちゃいましょう!