syghの新フラグメント置き場

プログラミングTipsやコード断片の保管場所です。お絵描きもときどき載せます。

Windowsの画面キャプチャ取得方法

Windowsにおいて、画面のキャプチャ(スクリーンショット)を取得する方法はいくつかあるのですが、下記の標準機能は遥か昔(たぶんWindows 95あたり)から搭載されています。いずれもWindowsユーザーであれば誰もが知っていないとおかしいレベルの、初歩中の初歩です。

PrintScreenキー デスクトップ全体を1つの画像として取得します。マルチディスプレイ(マルチモニター)環境の場合、合成された1つの画像となります。
Alt+PrintScreenキー アクティブなウィンドウのみのスクリーンショットを取得します。ただしMDI子ウィンドウのみのキャプチャには対応していません。アクティブでない別のウィンドウがかぶさっている場合、そのウィンドウも映り込みます。

PrintScreenキーで取得したデータは、不可視のクリップボード(システム全体で共有するグローバルメモリ領域)にビットマップ画像データとして保存されます。オンメモリなので、当然Windowsをシャットダウン/再起動すると消失する揮発性のデータです。クリップボードに保存されたビットマップ画像データをファイルとして保存する場合は、お好みのペイントツールにてキャンバスに貼り付けて、所望のフォーマットで保存します。Windowsに標準搭載されているMS Paint(ペイント)を使う場合は、あらかじめキャンバスサイズを小さくしておけば、ペースト時に画像サイズに合わせてキャンバスを自動拡張してくれます。MS Word/Excel/PowerPointなど、Office系のソフトも直接クリップボード経由でドキュメント内に画像を貼り付けることができますが、設定によってはファイル埋め込みの際に、勝手に画像の解像度を落としてしまうこともあるので注意が必要です。サードパーティ製のアプリケーションを自由にインストールできる自宅のプライベート端末では、起動と動作が軽快なIrfanViewを使ってクリップボードデータをファイル保存することが多いです。

ちなみにスクリーンショットを画像ファイルとして保存するときは、通例可逆圧縮PNGフォーマットを使います。非可逆圧縮JPEGは主に写真向けの圧縮フォーマットであり、画面スクリーンショットの保存には向いていません(色変化の激しい部分でモスキートノイズが目立ったり、PNGよりもファイルサイズが増加したりします)。

なお、スクリーンショット画像にはマウスなどポインティングデバイスのカーソルが含まれません。カーソル合成前の画像となります。特に困ることはないと思いますが、もしマニュアル作成用途などで画像にカーソルをどうしても含めたい場合は、スクリーンショットにカーソルのアイコンをオーバーレイ描画した合成画像を自動生成できるツールがあるので、そういったものを利用する方法もあります。

Windows Vista以降

Windows Vistaではキャプチャ用のSnipping Toolが搭載されました。デスクトップ全体・指定ウィンドウ以外に、選択領域のキャプチャもできます。しかし、個人的には上記のPrintScreenキーとペイントツールを使った方法よりもかえってめんどくさいので使っていません。また、PrintScreenキーを使った方法であれば、コンボボックスのドロップダウンリストを展開表示した状態や、特定のUI要素をマウスオーバーした状態でスクリーンショットを取得することができますが、Snipping Toolではそういったことができません。

Windows 8以降

Windows 8において、Windowsキー+PrintScreenキーを押すと、"%UserProfile%/Pictures/Screenshots"にデスクトップ全体のスクリーンショットPNG形式で自動保存されるようになりました。これはわりと有用な機能だと思いますが、Windows 7以前では使えないので、知っている人は少ないかもしれません。

ただし、Alt+PrintScreenのようにアクティブウィンドウのみをキャプチャして直接ファイル保存する機能がありません。この点がかなり不満です。

Windows 10

Windows 10ではゲーム録画 (Game DVR) の機能が追加され、Windows+Alt+PrintScreenでアプリのスクリーンショットを取得・保存できるようになりました。保存場所は"%UserProfile%/Videos/Captures"だそうです。「ゲーム録画」と銘打っていますが、ゲームアプリ以外でも使えます。しかし、利用にはXboxアプリへのMicrosoftアカウントを利用したサインイン(ネットワーク接続)が必要です。ローカルアカウント中心で使っているユーザーや、企業ユーザーの場合は使えない手段でしょう。Game DVRは当初既定で無効化されていたものの、Anniversary Update (1607) にて既定で有効化されたようです。以降は無効化する場合にもXboxアプリへのサインインが必要だそうで、もう意味不明ですね。Game DVRは個人情報が勝手にぶっこ抜かれる可能性があるので、自分は使っていません。

なお、Creators Update (1703) では余計な機能満載のPaint 3Dが標準インストールされるようになったのですが、さらにFall Creators Update (1709) では、従来の標準ペイントツールMS Paintが廃止・非標準になりました。完全に廃止されたわけではなく、Windowsストア(Microsoftストア)から明示的にインストールすれば使えるらしいのですが、ストアへのアクセスにはやはりサインイン(ネットワーク接続)が必要となります。電卓アプリや画像ビューアーの劣化と同じような道をたどるようです。ぶっちゃけ「Creators Update」とかいいつつ、誰も望んでいない、使えないゴミアプリを搭載しただけのアップデートです。そもそもCreatorだったらAdobe/Autodeskなどのデファクトスタンダードサードパーティ製ツールを使うのでPaint 3Dなんぞ要らないですね。

MS Paint自体はAdobe Photoshopなどと比べると大した機能を持っていませんが、これまでは標準インストールされていたことが最大の強みでした。特に仕事で、好きなペイントツールが使えない(インストールされていない/できない)端末において、取得したスクリーンショットをファイル保存するときだけはMS Paintをよく使っていました。また、機能が少ないぶんシンプルで、操作体系も昔からほとんど変わっていないため、初心者でも使いやすいというメリットがありました。しかし、今後は仕事で他の人にスクリーンショットの取得を指示する場合、まずはPaint 3DもしくはSnipping Toolに慣れてもらう必要がありそうです。

Steam

Valveが提供・運営するSteamプラットフォーム向けのゲームでは、共通してF12キーでスクリーンショット画像をファイル保存できます。ウィンドウモードでもクライアント領域のみが保存されるので、Steamの場合はこちらのほうが便利でしょう。昔はJPEGフォーマットのみでしたが、現在は劣化の無いPNGでの保存もサポートされています。

余談

XPやVista/7はLunaやAeroといったVisualテーマを適用すると、ウィンドウの四隅が丸くなります。キャプチャすると四隅の部分は白色となりますが、個人的にはこの丸まった四隅がダサくて大嫌いでした。
また、過去のWindowsではタイトルバーにグラデーションが使われていたり、Windows Aero (Aero Glass) の機能でウィンドウが透過していたりしたのですが、これによりPNGキャプチャ画像は無駄にファイルサイズが大きくなりがちでした。なめらかに色変化する複雑な画像はPNGだと圧縮しづらいからです。Windows 8.xではデザイン方針としてModern UIを採用することでタイトルバーがシンプルな単色になり、PNGキャプチャ画像のファイルサイズも削減されました。しかし、Windows 10 1709では、Fluent Design Systemという、これまたMSの自己満足的デザイン方針が採用され、AppleiOSで採用されているような半透明のすりガラス(アクリル)効果が多用されることになったため、再びPNGキャプチャ画像のファイルサイズが無駄に増えそうです。

2018-07-31追記
Windows 10の次期バージョン(RS5)では、Snipping Toolが廃止予定となったようです。代わりに「Screen Sketch」とやらが導入される予定だそうですが、どうも微妙な感じのツールですね。どうせ使わない気がします。短命に終わる要らないアプリを開発してるヒマがあったら、バグのひとつでも取り除いてOS自体の品質を高めて欲しいです。