Windows ステップ記録ツール(psr)のススメ

# はじめに
唐突だけど、みんなWindows上で何か作業するときその様子をスクリーンショット(以下SS)などを撮って保存しておきたいとき、どうやっているのだろう。
よくあるのは、Alt + PrntScrnキーを押してSSとってペイント起動して貼り付けて保存とかだろうか。
特別なツールも必要ない汎用的な手なので一番使われている方法だと思う。
反面、非常に手間がかかる方法なので、SSが数十枚～数百枚必要となる場面では、その行為だけで相当な時間を使ってしまう。
Windows10なら何もツール使わなくてもPrntScrnキー押しただけで勝手に保存してくれたりするけど、まだまだWindows7-8.1を使ってる人のほうが多いと思う。

自分の業務PCや現場作業用の持ち出し用PCとかなら、専用ツール(例えばWinShotとか)がインストール済でお手軽・簡単・確実にSS保存出来るのだろうけど・・・世の中そんな都合良い状況ばかりではない。

というわけで皆様にご紹介したい！

# psrの基本

今すぐ、windowsキー押して「psr」と入力、エンターたたーん！
![2017-01-15.png](https://qiita-image-store.s3.amazonaws.com/0/80163/4708668b-0b1c-27a7-d155-6a692de5074e.png)
こんなのが起動すると思う。

## 簡単な操作方法
※下記はWindows8以降の場合
※Windows7の場合、4-5の手順がなく、直接ファイルの保存ウィンドウが開かれる

1. 左の「記録の開始」をクリック。
1. あとは何度かデスクトップ上で適当なところをクリックしたり、スクロールしてみる。
1. その後「記録の停止」をクリック。
1. 別ウィンドウが開くので、スクロールしながら中身を見てみると、クリックしたタイミングの画像がたくさん羅列されているはず。
1. 上部の「保存」をクリックして、適当なパスにzipファイルを保存。
1. 保存したzipファイルを解凍すると、.mhtというファイルが存在するので、実行するとIEが起動するはず。
1. 個別に画像を別途保存したい場合は、画像を右クリックして保存。


## psrとは
何か順番が違うような気もするけど、簡単なツールなのでとりあえず使ってみて欲しかった、
ウィンドウ名で書かれている通り、正式には「ステップ記録ツール」と言って、本来はMicrosoftがサポート対応のときにエンドユーザにこのツールを使ってもらい、トラブルの様子を撮影してもらうためのものらしい。
画像だけでなく、どこをどうクリックしたのか、みたいな情報も記録されるので、たしかにトラブルシュートには役に立つ。


## 長所
* Windows Vista以降には標準搭載のツールなので、2017年現在なら全てのWindows PCで使えると言って過言ではない
* クリックする毎に全て撮影されるため、漏れもないし、PrntScrnキー押したりする必要もないのでとても楽
* クリックした箇所が緑色の枠で色付けされるため、あとから画像を見返した際にどういった箇所をクリックしたのかがわかりやすい

## 短所
* 特定のウィンドウのみを撮影といったことは出来ないため、本来不必要な操作まで保存されてしまい、うざい・後々仕分けが面倒くさい
* 画像自体は.mhtとなって出力されるため、画像のみがすぐに欲しい場合、少々面倒
* 最大撮影枚数に上限値があり、超過分の画像は消失する
* 最大撮影枚数の上限を超えたとしても、通知はされない
* 設定変更内容は保存されないため、起動の度に設定する必要がある

あ、あれ・・・短所のほうが目立つぞ・・・？

## 重要な設定変更
標準状態では、画像は25枚しか保存されない。
psrの一番右側「▼」 => 「設定」をクリック
「保存する最新の取り込み画像数」の数字を変更する。
※Windows7では上限100まで、Windows8以降は上限999まで
※もしかしたら8.1から999だったかも・・・ごめんなさい、覚えてないです。

![2017-01-15 (1).png](https://qiita-image-store.s3.amazonaws.com/0/80163/2ea28a74-e88f-4de2-2b9a-b97fb89fc72b.png)

ただし、この設定変更は一時的なものなので、**毎回psrを動かす度にこの設定変更は必要となる。**


## 注意事項
### 最大取り込み画像数について
PCのスペックにもよるのだろうけれど、取り込み枚数が多すぎると、最後のzip生成処理にやたらと時間がかかったりする。
個人的には最大でも300枚ぐらいに抑えてます。
ちなみに100枚ぐらいでは、経験上どんなクソスペックPCでも1-2秒で処理が終わるのでWindows7使いの人はあまり気にしなくて良い。

さらに、**この最大取り込み画像数を超えた場合、psrが教えてくれたり、自動的に保存および終了、といったことはなく、**
上限を超えた場合、**先に撮影した画像が消えていく(つまりFIFO)**ことになるので、psrを使いながらの作業中は何となくそろそろ80枚かなー？みたいなこと考えながら、早めに一旦記録を停止させて保存してあげる必要がある。


### 設定変更内容について
先述の通り、最大取り込み画像数を100などに変更したとしても設定内容は保存されないため、起動の度に設定する必要がある。

# psrの応用

## オプション
psrは基本的にはGUIツールだけど、CLI上でコマンドとしても扱える。
結構、オプションがあるのだけれど、よく使うものだけピックアップして少々説明します。

```
/start              記録の開始
/stop               記録の停止
/sc [0|1]           画像取り込み機能の有効/無効(デフォルトで有効)
/maxsc [value]      取り込み画像数の最大値
/gui [0|1]          psrのGUI表示の有効/無効(デフォルトで有効)
/recordpid [value]  valueで指定したPIDのアプリケーションを触ったときだけ記録する
/output [filepath]  最終的なファイルの出力先(デフォルトではzip)
```

## 例
GUI非表示(quiet modeって感じ)状態で、最大取り込み画像数100枚、デスクトップに自動出力

```
C:\Users\hoge>psr /start /sc 1 /maxsc 100 /gui 0 /output "%userprofile%\desktop\ss.zip"
※ごにょごにょ操作
C:\Users\hoge>psr /stop
※デスクトップにzipファイルが自動保存
```

GUI表示、Firefoxのみ撮影、最大取り込み画像数5枚、デスクトップに自動出力

```bat
C:\Users\hoge>tasklist | findstr /i Firefox
firefox.exe                  10916 Console                    1  1,791,504 K

C:\Users\hoge>psr /start /recordpid 10916 /maxsc 5 /output "%userprofile%\desktop\hoge.zip"

```

## 注意事項
* /gui 0で動かした場合、記録を停止させるには、psr /stopしか方法がないため忘れずに停止させること
* /ouputで指定したパスに自動保存されるが、同名ファイルが存在していた場合、自動的に上書き保存されてしまう
* recordpidはあくまで指定したpidのウィンドウを触ったタイミングで撮影する、というだけで、そのウィンドウのみを撮影する、というわけではない
※あくまでフルスクリーン撮影であり、Alt + PrntScrnの挙動になるわけではない

## 小ネタ
### 記録中、どこに画像は保存されているの？
* Windows7の場合、%userprofile%\appdata\local\microsoft\UAR\[英数字-の文字列]
* Windows8以降の場合、%userprofile%\appdata\local\microsoft\UIR\[英数字-の文字列]

※もしかしたら8.1以降だったからかもしれない
※vistaは不明、でもWin7と同じだと思う

### 画像が撮影されるタイミングは？
左クリックあるいは右クリックを行った際に撮影される。キーボード操作では撮影されない (つまり何か文字を入力した場合、一文字打つ度に撮影されちゃう、とかそういったことはない)

### 画像を別に保存するのが面倒くさい、.mhtになるのが面倒くさい
* excelやwordに貼り付けたいだけなら、.mhtを開いた状態で、画像を右クリック => コピーでクリップボードにコピーされるので、そのまま別のアプリケーショに渡せることが出来る (まぁそれでも面倒くさいとは思うが・・・)
* 記録を停止させる前に、上述したパスから直接画像を引っこ抜く
* 画像は.mht内部でbase64でエンコードされた状態で存在するので、頑張って引っこ抜く (ググれば.mhtから画像をバラしてくれるツールが既に存在するのでそういったのを使うのが良い)

### リモートデスクトップを使っていてもpsrは反応してくれる？
とにかくクリックさえすれば記録されるので、きちんと撮影はされる。
緑色の枠の色付けもされるが、リモートデスクトップのウィンドウ自体に色付けされる。
※リモートデスクトップ先のクリック箇所が色付けされるわけではない

## wrapper tool
psrは個人的にはとても好きなツールで、よく使っているのだけれど、やはり短所が目立つ。
というわけで、wrapper toolを作りました。
[AutoPsr](https://github.com/gzock/AutoPsr/blob/master/AutoPsr.bat)
※クソコードでごめんなさい。
※2014年に作り、ほぼ放置状態です。ごめんなさい・・・そろそろメンテしないと。
※まぁただこれ別途入れるぐらいなら、WinShotとかインストールすりゃよくね？みたいなことは思う

### 機能
* Windows batファイルなので実行するだけで開始
* 最大取り込み画像数に近づくと、自動的にpsrを停止/再開してくれるので、手間なく事実上無限にSSを取り続けられる 
* 画像のみを抽出して別途保存してくれる

### 注意
AutoPsr.batを実行後、何らかの理由で不正終了などした場合は、%userprofile%\appdata\local\microsoft\\[uar|uir]\\[uuid]\ 配下に既にjpeg画像が存在している可能性が高い。
この状態では、AutoPsr.batは正常動作しない。
※psrは上記パス配下に画像を溜め込むが、AutoPsrはその枚数を数える仕様であるため、何らかの理由で既にjpeg画像が存在すると、正しく動作できない
これについては、AutoPsr.batが動く際に画像が既にあることが判明したら、事前に削除処理をしていいかユーザに聞くとか、そういった機能を追加しようと思います。多分。

# 参考

非常に参考にさせて頂きました。ありがとうございます。
psrの全てのオプションなどを確認したい場合は下記を参照して下さい。
[Problems Step Recorder \(PSR.exe\) Command Line Options](https://social.technet.microsoft.com/Forums/office/en-US/b78253b1-6e38-4563-9efa-4973414e9a75/problems-step-recorder-psrexe-command-line-options?forum=w7itprogeneral)