【Power Automate】Kindle本のスクリーンショットを自動で取得する方法

Power Automateを使用して、Kindle本のスクリーンショットを自動で取得する方法について記載した記事です。
この方法で取得するスクリーンショット画像は別ページにあるAnkiカードの元ネタを作成するためのものです。そのため、この方法で取得したスクリーンショットの画像にはKindleのスクロールバーも含まれてしまいます。

スクロールバーが含まれないスクリーンショット画像が欲しい場合は、参考にも記載したこちら(外部サイト)の記事を参考するとよいと思います。

(2024/04/05追記)
ネットサーフィンしていたら下記のサイトを見つけたので貼っておきますね。(助かりますね~)

必要なアプリ

  • Kindleアプリ PC版(Kindle for PC)
    ダウンロード先はこちら
  • Power Automate
    ・Windows11は標準搭載です。
    ・Windows10(Windows10 → 11にアップグレードした場合も含む)はMicrosoft Storeからインストールします。
    Microsoft Storeへのリンクはこちら。(「Microsoft Store アプリの取得」から飛べます)

Power Automateの設定

Power AutometeにKindle本のスクリーンショットを自動で取得するコードを設定します。

    1. Power Automateを起動し、「新しいフロー」をクリックする。
    2. フロー名を入力し、「作成」ボタンを押下します。
      フロー名は何でもよいですが、この記事では「Kindle_Screenshot」としました。

      「自分のフロー」に上で入力したフローが追加されます。
    3. タブが「Main」になっていることを確認し、緑枠内にコード①をコピーして貼り付けます。

      コード①

      # ■Kindleアプリの起動確認
      UIAutomation.FocusWindow.Focus Window: appmask['Window \'Kindle\'']
      ON ERROR
          SET app_status TO $'''app_error'''
      END
      IF app_status = $'''app_error''' THEN
          Display.ShowMessageDialog.ShowMessage Title: $'''エラー''' Message: $'''Kindleアプリの起動確認でエラーが発生しました。
      以下の原因が考えられます。
      
      ・Kindleアプリが起動していない
      ・Kindleアプリにフォーカスできない
      ''' Icon: Display.Icon.ErrorIcon Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True
          EXIT Code: 0
      END
      /# ■出力先フォルダーの確認
      ・デスクトップの出力先フォルダーの存在チェック
      ・出力先フォルダーがなければ作成する#/
      Folder.GetSpecialFolder SpecialFolder: Folder.SpecialFolder.DesktopDirectory SpecialFolderPath=> desktop_path
      IF (Folder.IfFolderExists.DoesNotExist Path: $'''%desktop_path%\\kindle_screenshot''') THEN
          Display.ShowMessageDialog.ShowMessage Title: $'''出力先フォルダー確認''' Message: $'''デスクトップに出力先フォルダーが存在しません。作成しますか?''' Icon: Display.Icon.Question Buttons: Display.Buttons.YesNo DefaultButton: Display.DefaultButton.Button1 IsTopMost: True ButtonPressed=> create_folder_button_pressed
          IF create_folder_button_pressed = $'''Yes''' THEN
              Folder.Create FolderPath: desktop_path FolderName: $'''kindle_screenshot'''
          ELSE
              EXIT Code: 0
          END
      END
      SET output_folder_path TO $'''%desktop_path%\\kindle_screenshot'''
      Display.InputDialog Title: $'''最終%位置指定''' Message: $'''スクリーンショットを取得するページの最終%位置を指定してください。(例:100→最終ページまでスクリーンショットを取得)''' DefaultValue: 100 InputType: Display.InputType.SingleLine IsTopMost: True UserInput=> input_percent ButtonPressed=> percent_button_pressed
      IF percent_button_pressed = $'''Cancel''' THEN
          EXIT Code: 0
      END
      /# ■電子書籍が左開き・左綴じか右開き・右綴じかを選択する処理
      電子書籍の次のページへ進む方向(押下するボタン)を決定するために必要。
      ※基本的に、横書きは左開き・左綴じ、縦書き・コミックは右開き・右綴じ。#/
      Display.SelectFromListDialog.SelectFromList Title: $'''製本選択''' Message: $'''電子書籍が「左開き・左綴じ」か「右開き・右綴じ」かをリストから選択してください。''' List: $'''左開き・左綴じ(横書き)
      右開き・右綴じ(縦書き・コミック)''' IsTopMost: False AllowEmpty: False SelectedItem=> bookbinding SelectedIndex=> list_index ButtonPressed=> bookbinding_button_pressed
      IF bookbinding_button_pressed = $'''Cancel''' THEN
          EXIT Code: 0
      END
      UIAutomation.FocusWindow.Focus Window: appmask['Window \'Kindle\'']
      WAIT 3
      Text.ToNumber Text: input_percent Number=> end_percent
      CALL get_percent
      SET count TO 1
      SET prefix TO $'''Page-'''
      LOOP WHILE (current_percent) <= (end_percent)
          SET file_name TO $'''%prefix + count%.png'''
          UIAutomation.TakeScreenshotOfUIElement.TakeScreenshotOfUIElementAndSaveToFile Control: appmask['Window \'Kindle\'']['Group \'Mazama::MultiPageCanvas\''] ImageFilePath: $'''%output_folder_path%\\%file_name%''' ImageFormat: UIAutomation.ImageFormat.Png ImageFile=> kindle_page_image_path
          WAIT 1
          /# ■位置%が100の処理
      最終ページ到達時はフローを停止する。#/
          IF current_percent = 100 THEN
              File.ConvertToBase64 File: $'''%output_folder_path%\\%file_name%''' Base64Text=> base64_text
              SET pre_count TO count - 1
              SET pre_file_name TO $'''%prefix + pre_count%.png'''
              File.ConvertToBase64 File: $'''%output_folder_path%\\%pre_file_name%''' Base64Text=> pre_base64_text
              /# ■最終ページ確定処理
      1. 現在のぺージのスクショした画像ファイルをBase64変換する。
      2. 1つ前のページのスクショした画像ファイルをBase64変換する。
      3. 上記1.と2.の値を比較する。同じ値の場合、最終ページに到達したと判断しフローを停止する。#/
              IF base64_text = pre_base64_text THEN
                  File.Delete Files: $'''%output_folder_path%\\%file_name%'''
                  EXIT LOOP
              END
          END
          /# ■次のページへ進む処理
      0:左開き・左綴じ(横書き):右キー押下
      1:右開き・右綴じ(縦書き・コミック):左キー押下#/
          IF list_index = 0 THEN
              MouseAndKeyboard.SendKeys.FocusAndSendKeys TextToSend: $'''{Right}''' DelayBetweenKeystrokes: 10 SendTextAsHardwareKeys: False
          ELSE
              MouseAndKeyboard.SendKeys.FocusAndSendKeys TextToSend: $'''{Left}''' DelayBetweenKeystrokes: 10 SendTextAsHardwareKeys: False
          END
          WAIT 1
          Variables.IncreaseVariable Value: count IncrementValue: 1
          CALL get_percent
      END
      Display.ShowMessageDialog.ShowMessage Title: $'''完了''' Message: $'''スクリーンショット取得処理が完了しました。''' Icon: Display.Icon.Information Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True
      

      コードを貼ると以下のようになります。エラーが7つ出ますが、この後解消するので問題ありません。

    4. 「サブフロー」タブにある「新しいサブフロー」をクリックします。

      「サブフロー名」に「get_percent」と入力し、「保存」ボタンを押下します。
    5. タブが「get_percent」になっていることを確認し、緑枠内にコード②をコピーして貼り付けます。

      コード②

      UIAutomation.GetElementDetails Element: appmask['Window \'Kindle Footer\'']['Text'] AttributeName: $'''Name''' AttributeValue=> current_footer_text
      Text.CropText.CropTextBeforeFlag Text: current_footer_text ToFlag: $'''%%''' IgnoreCase: True CroppedText=> current_percent
      

      コードを貼ると以下のようになります。エラーが4つ出ますが、この後解消するので問題ありません。

    6. Kindleアプリを起動し、スクリーンショットを取得する電子書籍を開きます。
    7. タブを「Main」に切り替え、右側にある上から2つ目のアイコンをクリックし、「UI要素」を表示します。
      「UI要素の追加」を押下し、「UI要素ピッカー」を開きます。

      「UI要素ピッカー」で、下記のようにUI要素「Group」が選択されるようにカーソルを移動し、「Ctrl + 左クリック」を押してUI要素を追加します。

      「UI要素ピッカー」で追加するUI要素を選ぶと、「Window ‘Kindle XXX’」(XXXは電子書籍名)という名前のUI要素が一覧に表示されます。

      「Window ‘Kindle XXX’」(XXXは電子書籍名)となっている名前を「Window ‘Kindle’」に変更します。
      (※名前の変更は右クリックまたは右の「︙」をクリックして出てくる「名前の変更」から行う)

      上の「Window ‘Kindle’」と書いてある部分をダブルクリックし、UI要素の編集を行います。
      属性Nameにある演算子と値を下記のように変更し、「保存」ボタンを押下します。
       ・演算子:「と等しい」から「含む」に変更
       ・:「Kindle XXX」(XXXは電子書籍名)を「Kindle」に変更
        
    8. (7.と同様の手順で)「UI要素」で「UI要素の追加」を押下し、「UI要素ピッカー」を開きます。
      「UI要素ピッカー」で、下記のようにUI要素「Text」が選択されるようにカーソルを移動し、「Ctrl + 左クリック」を押してUI要素を追加します。

      「UI要素ピッカー」で追加するUI要素を選ぶと、「Window ‘Kindle XXX’」(XXXは電子書籍名)という名前のUI要素が一覧に表示されます。

      「Window ‘Kindle XXX’」(XXXは電子書籍名)となっている名前を「Window ‘Kindle Footer’」に変更します。

      「Window ‘Kindle Footer’」と書いてある部分をダブルクリックし、UI要素の編集を行います。
      属性Nameにある演算子と値を下記のように変更し、「保存」ボタンを押下します。
       ・演算子:「と等しい」から「含む」に変更
       ・:「Kindle XXX」(XXXは電子書籍名)を「Kindle」に変更
        
      さらに、「Text ‘X% X/Xページ・位置No.X/X’」となっている部分の名前を「Text」に変更します。

      上の「Text」と書いてある部分をダブルクリックし、UI要素の編集を行います。
      要素1~5のチェックを外します。
      要素6の「Text ‘X% X/Xページ・位置No.X/X’」の中の属性Nameにチェックを入れます。
      属性Nameにある演算子と値を下記のように変更し、「保存」ボタンを押下します。
       ・演算子:「と等しい」から「含む」に変更
       ・:「X% X/Xページ・位置No.X/X」を「%」(半角%)に変更(変更前の値の%を残せばOK)
        
    9. 保存します。これで準備は完了です。

      ※この時点で、エラーはすべて消えているはずです。
       エラーが消えていない場合は、7と8の手順がミスっているか、もしくは正しく反映されていないかのどちらかであるため、
       再度7と8を見直し&再実施してください。
    10. デスクトップに「kindle_screenshot」フォルダを作成します。
      これでPower Automateを実行する準備ができました。

Power Automateの実行

  1. Kindleアプリを起動し、スクリーンショットを撮る電子書籍を開きます。
  2. スクリーンショットを撮り始めるページを開きます。
  3. Power Automateを実行します。
    編集画面を開いている場合は、下記の「実行」を押下します。

    または、「自分のフロー」の中にある「Kindle_Screenshot」から実行します。
  4. スクリーンショットを取得するページの最終%位置を指定します。
    数値を入力したら「OK」ボタンを押下してください。

    • %の値はKindleのフッターに書いてあります。
      50であれば50%のページ、100であれば書籍の最終ページまでスクリーンショットを取得するという意味です。
    • 指定した値はスクリーンショットを取得します。
      例えば、50と指定した場合、50%の複数ページはスクリーンショットを取得しますが、51%のページは取得しません。
    • 101以上の数値は指定しないでください。
    • スクリーンショットを開始するページは2.で開いたページとなりますので、ここでは指定しません。
  5. 電子書籍が左開き・左綴じか右開き・右綴じかを選択します。
    リストから選択し、「OK」ボタンを押下すると、スクリーンショットの取得が始まります。

    • 基本的に、横書きの書籍は左開き・左綴じ、縦書きの書籍やコミックは右開き・右綴じです。
      この設定が逆の場合、ページをめくる方向が逆になりますので注意してください。
  6. スクリーンショットの取得中(Power Automate実行中)
    ※一切のキーボード操作・マウス操作を行わないでください!
  7. 下記のダイアログが出現し、「OK」ボタンを押下したら終了です。
  8. スクリーンショット画像を確認します。
    デスクトップの「kindle_screenshot」フォルダにPNGのスクリーンショット画像が格納されています。

注意点

もし上手く動かない・スクリーンショットが撮れない場合は、下記の点に注意して再度実行してみてください。

  • Power Automate 実行中に、キーボード操作・マウス操作をしないようにする。
  • Kindleアプリのウィンドウがフォアグラウンド(最前面)になるようにする。
    左画面をKindle、右画面をPower Automateのように2画面で実行するのがおすすめです。

参考

タイトルとURLをコピーしました