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

Power Automate Desktop でタイムラプス画像を保存

Power Automate Desktop でタイムラプス画像を保存してみましょう。

パソコンで作業した過程を後から人へ伝えたい時があります。教材を作るときはスクリーンキャストを作りますが、試行段階なので動画を撮影するほどでもない。でもうまくいったらブログで公開しよう。そんな場合です。

目次

Power Automate Desktopを使うと簡単に作ることができました。Windows 10へ無料でインストールできます。Windows 11には標準でインストールされているようです。

スクリーンショットを取得するフロー

  • 保存先のフォルダを指定
  • ループの中でスクリーンショットを取得
  • 連番で保存
5秒おきにデスクトップのスクリーンショットを保存

6行ですが、5秒おきにスクリーンショットを連番保存できます。120回のループなので10分の操作を記録したタイムラプス動画が簡単につくれます。

同じ画像を重複して保存しないMainフロー

連番で画像が保存できましたが、ブログに貼り付ける用途では同じ画像が重複してしまうと面倒です。同じ画像かどうかハッシュで比較します。

変数の設定が多くなるので、ハッシュを比較する処理はサブフローにしました。

タイムラプス フロー Power Automate
デスクトップのタイムラプス画像を取得

ハッシュを比較してファイルを削除するサブフロー

サブフローの「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