PC画面を連続で記録する方法

Power Automate Desktop でタイムラプス画像を保存してみましょう。
パソコンで作業した過程を後から人へ伝えたい時があります。教材を作るときはスクリーンキャストを作りますが、試行段階なので動画を撮影するほどでもない。でもうまくいったらブログで公開しよう。そんな場合です。
Power Automate Desktopを使うと簡単に作ることができました。Windows 10へ無料でインストールできます。Windows 11には標準でインストールされているようです。
スクリーンショットを取得するフロー
- 保存先のフォルダを指定
- ループの中でスクリーンショットを取得
- 連番で保存

6行ですが、5秒おきにスクリーンショットを連番保存できます。120回のループなので10分の操作を記録したタイムラプス動画が簡単につくれます。
同じ画像を重複して保存しないMainフロー
連番で画像が保存できましたが、ブログに貼り付ける用途では同じ画像が重複してしまうと面倒です。同じ画像かどうかハッシュで比較します。
変数の設定が多くなるので、ハッシュを比較する処理はサブフローにしました。

ハッシュを比較してファイルを削除するサブフロー
サブフローの「Check_Hash」で重複画像を削除しています。

SET LastImage TO $'''\"\"'''
SET TmpImage TO $'''\"\"'''
SET LastHash TO $'''\"\"'''
SET TmpHash TO $'''\"\"'''
SET FileName TO 1
Folder.GetSpecialFolder SpecialFolder: Folder.SpecialFolder.MyPictures SpecialFolderPath=> PicturesFolderPath
Display.SelectFolder Description: $'''スクリーンショットの保存先を指定してください。''' InitialDirectory: PicturesFolderPath IsTopMost: True SelectedFolder=> SelectedFolder ButtonPressed=> ButtonPressed
LOOP LoopIndex FROM 1 TO 120 STEP 1
WAIT 5
SET LastImage TO $'''%SelectedFolder%/%FileName%.png'''
Workstation.TakeScreenshot.TakeScreenshotAndSaveToFile File: LastImage ImageFormat: System.ImageFormat.Png
WAIT 5
SET TmpImage TO $'''%SelectedFolder%/%FileName + 1%.png'''
Workstation.TakeScreenshot.TakeScreenshotAndSaveToFile File: TmpImage ImageFormat: System.ImageFormat.Png
CALL Check_Hash
END
上記を「Main」に貼り付けます。
下記を新規に作成したサブフローに保存して名前を「Check_Hash」にします。
Cryptography.HashFromFile HashAlgorithm: Cryptography.HashAlgorithm.SHA256 Encoding: Cryptography.EncryptionEncoding.Unicode File: LastImage HashedText=> LastHash
Cryptography.HashFromFile HashAlgorithm: Cryptography.HashAlgorithm.SHA256 Encoding: Cryptography.EncryptionEncoding.Unicode File: TmpImage HashedText=> TmpHash
IF LastHash = TmpHash THEN
File.Delete Files: TmpImage
ELSE
Variables.IncreaseVariable Value: FileName IncrementValue: 2
END
とりあえず動くコードが欲しい
下記を「Main」に貼り付けます。
SET LastImage TO $'''\"\"'''
SET TmpImage TO $'''\"\"'''
SET LastHash TO $'''\"\"'''
SET TmpHash TO $'''\"\"'''
SET FileName TO 1
Folder.GetSpecialFolder SpecialFolder: Folder.SpecialFolder.MyPictures SpecialFolderPath=> PicturesFolderPath
Display.SelectFolder Description: $'''スクリーンショットの保存先を指定してください。''' InitialDirectory: PicturesFolderPath IsTopMost: True SelectedFolder=> SelectedFolder ButtonPressed=> ButtonPressed
LOOP LoopIndex FROM 1 TO 120 STEP 1
WAIT 5
SET TmpImage TO $'''%SelectedFolder%/%FileName%.png'''
Workstation.TakeScreenshot.TakeScreenshotAndSaveToFile File: TmpImage ImageFormat: System.ImageFormat.Png
IF (File.IfFile.Exists File: LastImage) THEN
Cryptography.HashFromFile HashAlgorithm: Cryptography.HashAlgorithm.SHA256 Encoding: Cryptography.EncryptionEncoding.Unicode File: LastImage HashedText=> LastHash
END
Cryptography.HashFromFile HashAlgorithm: Cryptography.HashAlgorithm.SHA256 Encoding: Cryptography.EncryptionEncoding.Unicode File: TmpImage HashedText=> TmpHash
IF LastHash = TmpHash THEN
File.Delete Files: TmpImage
ELSE
Variables.IncreaseVariable Value: FileName IncrementValue: 1
SET LastImage TO TmpImage
END
END