読者です 読者をやめる 読者になる 読者になる

脳の中の絵本

疲れて動けなくなったときの症状記録。脳内妄想日記。

Win10のスクリーンショット保存方法 (試行錯誤)

概要

Windows10でアクティブウィンドウのスクリーンショット取るにはどうしたらいいんだ…

やってみた

フリーソフト使用

WinShot

WinShot 10年前からずっと愛用し続けている。感謝。

Win10でも動くかな…と心配しながらダブルクリックし、無事起動してまずは安心。いつものようにビットマップ保存形式をPNGに変更し、アクティブウィンドウの保存を試みたところ、キャプチャ結果が不自然に拡大されてしまう不具合に遭遇。

ディスプレイの解像度を 1920x1080 に落とすと大丈夫だったが、せっかくなら今使用中のノートPCの最大値である 2560x1440 で使いたい。

ググったら解決法を載せている方がいらっしゃって助かった。 anicle.jp

やれやれ安心だと思ったのも束の間、よく見ると左右下に妙なパディングが入ってしまっている f:id:ytez1012:20160403150236p:plain

「Win2000の頃から世話になっているというのにタダでWin10サポートを期待するのはいけないな…」と感じながら、一応別のソフトも試してみた。

Friendly Capture

www.vector.co.jp

f:id:ytez1012:20160403151626p:plain

ファイル名の指定等かゆいところに手が届くいいソフトだが、やはり余白が入ってしまった。

NirCmd (savescreenshotwin)

www.nirsoft.net

怖いくらいコマンドラインでいろいろできるソフト。アクティブウィンドウの保存はsavescreenshotwinを使う。

NirCmd Command Reference - savescreenshotwin

こちらも同様、左右下に余白が入ってしまう。「レガシーなアクティブウィンドウの座標取得方法みたいなものがあって、それがWindows10にマッチしていないのかな…」と適当に結論づける。

もっと新しくてWin10対応と書かれているソフトを使えばいいのだろうけど、レジストリを汚すような大きなソフトはできるだけ入れたくない気持ちがあり、「展開して実行する」くらいの簡単なやつを使いたかったので、フリーソフト使用は諦めた。

Windowsネイティブの機能利用

Alt + PrtScr → ペイント貼り付け → 保存

これは何も問題無い。安定。

Win + PrtScr

%homepath%\Pictures\Screenshots に全画面のスクリーンショットPNGで保存してくれる。「おおこれいいじゃんアクティブウィンドウ用のホットキー無いの?」と思ったけどググり力が足りないせいか調べられなかった…。誰か教えて…。

SnippingTool

windows.microsoft.com

SnippingTool.exe の起動にショートカットやホットキーを設定しておけば、Alt + PrtScr → ペイント よりは楽な印象。とり急ぎ Win + R → st で起動するようにしてみた。

ゲームバーのキャプチャ機能

support.xbox.com

もともとはゲーム画面の共有や実況に使うための機能らしいが、FireFoxiTunes等別のソフトでも動く。

  • キャプチャしたいウィンドウをアクティブにする
  • Win + G でゲームバーを表示し、ゲームとして記憶させる
  • Win + Alt + PrtScr でPNG保存される (ウィンドウのタイトルと日時を含めたファイル名にしてくれる)

保存ディレクトリパスは変更可能らしいので早速変更。

あわよくばのブログ: Window10 便利な画面録画機能の保存先変更! (Win + G)

ただ、explorerウィンドウ上でゲームバーを起動させることはできなかった。残念。

取り急ぎ

  • ゲームバーが出せるソフトは Win + Alt + PrtScr で保存する
  • エクスプローラはSnippingToolで保存する
    1. Win + R → st でSnippingTool 起動
    2. 新規作成 → ウィンドウ選択
    3. SnippingToolを閉じる。保存しますか?と出るので「はい」
    4. ファイル名がデフォルトで「キャプチャ.PNG」になってしまうので適当に変える

ことにした。

日時文字列をクリップボードにコピー

上記の「キャプチャ.PNG」を変えるのがやや手間なので、日時をクリップボードにコピーするBATを用意。*1

dt.bat
@echo off
set d=%DATE%
REM set t=%TIME%
set t=%TIME: =0%
set /p <NUL="WS_%d:~0,4%%d:~5,2%%d:~8,2%_%t:~0,2%%t:~3,2%%t:~6,2%" | clip

Win + R → dt で "WS_20160403_164734" のような文字列としてコピーされる。echoじゃなくて set /p <NUL を使うことで末尾に改行入らなくさせるアレ。接頭辞はWinShotへの愛故に。

追記

2016/04/17

WinShot のカット機能で自動トリムする

blog.hylogics.com

同様の問題に遭遇している方がいらっしゃったので読んでいたところ、下記コメントを発見。

とおりすがり

winshotの「環境設定/カットタブ/キャプチャと同時にカットを行う」で下左右7pxカットすることでしのいでます。お試しあれ。

試してみたところ、自分のPCでは10pxずつカットすると良さそうだった。*2

  • 7px カット f:id:ytez1012:20160417103717p:plain
  • 10px カット f:id:ytez1012:20160417103729p:plain

これでまたしばらくはWinShotと共に生きていけそう。感謝。

dt.batの微修正 (半角スペースが入らないようにする)

元の書き方だと、0:00-9:59 までの間で時刻部分に半角スペースが入ってしまうため、修正した。

f:id:ytez1012:20160417014023p:plain

set t=%TIME: =0% で、%TIME%中の半角スペースを0に置換できる。*3

ToDo

BATから現在時刻を文字列として取得するのは、地域と時刻の設定にも依存するし、汎用性が低い。 PowerShellやVBS,JavaScriptで書き直したほうがよいのかもしれない。

勉強が必要だ。


*1:最近のブログはシンタックスハイライトも簡単にできるのだなあ…

*2:理由は不明。解像度が関係しているのだろうか…

*3:WinShotのカット機能を覚えたのであまり出番は無いかもしれない…