Power Automateを使用して、Kindle本のスクリーンショットを自動で取得する方法について記載した記事です。
この方法で取得するスクリーンショット画像は別ページにあるAnkiカードの元ネタを作成するためのものです。そのため、この方法で取得したスクリーンショットの画像にはKindleのスクロールバーも含まれてしまいます。
スクロールバーが含まれないスクリーンショット画像が欲しい場合は、参考にも記載したこちら(外部サイト)の記事を参考するとよいと思います。
(2024/04/05追記)
ネットサーフィンしていたら下記のサイトを見つけたので貼っておきますね。(助かりますね~)
- https://b.hatena.ne.jp/entry/s/czmemo.com/p2002/
「7. の名前を “Mazama::MultiPageCanvas”に変更したらうまく動きました(・∀・)」とのコメントがありました。 - https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10289651340
「本によってうまくいったりいかなかったりします。」と書いてありましたので、下記の方法は万能ではありませんね。
必要なアプリ
- Kindleアプリ PC版(Kindle for PC)
ダウンロード先はこちら。 - Power Automate
・Windows11は標準搭載です。
・Windows10(Windows10 → 11にアップグレードした場合も含む)はMicrosoft Storeからインストールします。
Microsoft Storeへのリンクはこちら。(「Microsoft Store アプリの取得」から飛べます)
Power Automateの設定
Power AutometeにKindle本のスクリーンショットを自動で取得するコードを設定します。
-
- Power Automateを起動し、「新しいフロー」をクリックする。
- フロー名を入力し、「作成」ボタンを押下します。
フロー名は何でもよいですが、この記事では「Kindle_Screenshot」としました。
「自分のフロー」に上で入力したフローが追加されます。
- タブが「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
- 「サブフロー」タブにある「新しいサブフロー」をクリックします。
「サブフロー名」に「get_percent」と入力し、「保存」ボタンを押下します。
- タブが「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
- Kindleアプリを起動し、スクリーンショットを取得する電子書籍を開きます。
- タブを「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」に変更
- (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)
- 保存します。これで準備は完了です。
※この時点で、エラーはすべて消えているはずです。
エラーが消えていない場合は、7と8の手順がミスっているか、もしくは正しく反映されていないかのどちらかであるため、
再度7と8を見直し&再実施してください。 - デスクトップに「kindle_screenshot」フォルダを作成します。
これでPower Automateを実行する準備ができました。
- Power Automateを起動し、「新しいフロー」をクリックする。
Power Automateの実行
- Kindleアプリを起動し、スクリーンショットを撮る電子書籍を開きます。
- スクリーンショットを撮り始めるページを開きます。
- Power Automateを実行します。
編集画面を開いている場合は、下記の「実行」を押下します。
または、「自分のフロー」の中にある「Kindle_Screenshot」から実行します。
- スクリーンショットを取得するページの最終%位置を指定します。
数値を入力したら「OK」ボタンを押下してください。 - 電子書籍が左開き・左綴じか右開き・右綴じかを選択します。
リストから選択し、「OK」ボタンを押下すると、スクリーンショットの取得が始まります。 - スクリーンショットの取得中(Power Automate実行中)
※一切のキーボード操作・マウス操作を行わないでください! - 下記のダイアログが出現し、「OK」ボタンを押下したら終了です。
- スクリーンショット画像を確認します。
デスクトップの「kindle_screenshot」フォルダにPNGのスクリーンショット画像が格納されています。
注意点
もし上手く動かない・スクリーンショットが撮れない場合は、下記の点に注意して再度実行してみてください。
- Power Automate 実行中に、キーボード操作・マウス操作をしないようにする。
- Kindleアプリのウィンドウがフォアグラウンド(最前面)になるようにする。
左画面をKindle、右画面をPower Automateのように2画面で実行するのがおすすめです。