「電子書籍のサービス終了に備える」(第2回)Kindle (1)キャプチャ編

電子書籍サービス終了 電子書籍

はじめに

本記事の目的については前回記事を見てください。

今回は、Amazonの電子書籍(Kindle)のキャプチャ方法を記載します。

Kindleをキャプチャするには、まず Kindle をPCで読めるように「Kindle for PC」(無料ソフト)をAmazonからダウンロード・インストールし、自分が購入した電子書籍を読めるか確認してください。

準備ができたら、前回記事でインストールした、Winshotuwscを使用して各ページをキャプチャしていきます。

先にPDF化の手順を知りたい場合は(第3回)Kindle (2)PDF化編を見てください。

1ページを手動でキャプチャ

以下の手順で1ページをキャプチャできることを確認します。

  1. WinShotをインストールしていない場合は、前回記事を参照してインストールしてください。
  2. WinShot.exe を実行します。
  3. Kindle で任意のページを表示し、ALT+PrintScreenを押下します。
  4. WinShotの設定で指定した保存先フォルダにキャプチャした画像があることを確認します。
  5. 保存された画像ファイルは確認用なので削除しておきます。

各ページを自動でキャプチャ

uwscをインストールしていない場合は、前回記事を参照してインストールしてください。

uwscスクリプト(ベース)

各ページを自動でキャプチャするために、uwscのスクリプトを作成する必要があります。ベースになるスクリプトは以下の通りです。uwsc.exe と同じフォルダに Kindle_capture.UWS として保存してください。※Shift-JIS(CP932)で保存しないと正常に動作しないようです。

メモ帳で保存する場合

1.下記ソースの右上をクリック(クリップボードにコピーされます)

2.メモ帳を起動し貼り付け

3.名前を付けて保存で、ファイル名にKindle_capture.UWSを入力、エンコードはANSIを選択し保存

// Kindle for PC の WindowID を取得
WID = GETID("Kindle for PC")
IF WID < 0 then
    MSGBOX("Kindle for PC が起動していません")
    EXIT
ENDIF

book_type = SLCTBOX(SLCT_RDO, 0, "画面サイズ変更のため本の種類を選択してください", "コミック", "文庫", "画面サイズ変更なし")
SELECT book_type
    CASE SLCT_1
        // コミック:画面位置サイズ(★ 変更要)
        pos_x = 1
        pos_y = 1
        width = 1693
        height = 1193
    CASE SLCT_2
        // 文庫:画面位置サイズ(★ 変更要)
        pos_x = 1
        pos_y = 1
        width = 806
        height = 1060
    CASE SLCT_3
        // 画面サイズの変更を行わない
        pos_x = 1
        pos_y = 1
        width = 0
        height = 0
SELEND

// Kindle for PC の画面サイズと位置を変更して、タイトルバーをクリック(アクティブにする)
MOUSEORG(0)
IF width <> 0 THEN ACW(WID, pos_x, pos_y, width, height, 0) ELSE ACW(WID, pos_x, pos_y)
MOUSEORG(WID)
BTN(LEFT, CLICK, 50, 10, 40)
SLEEP(0.5)

// キャプチャする回数を入力
capture_count = 0
WHILE TRUE
    capture_count_str = INPUT("キャプチャする回数を入力してください")
    IFB VARTYPE(capture_count_str) = VAR_EMPTY
        EXIT    // [キャンセル]
    ELSE
        capture_count = VAL(capture_count_str)
        IFB capture_count = ERR_VALUE 
            CONTINUE    // 入力エラー(数字以外)
        ENDIF
        BREAK
    ENDIF
WEND

// タイトルバーの色
title_color = PEEKCOLOR(5, 15)

FOR cnt = 1 TO capture_count
    // Kindle for PC の画面サイズと位置を変更して、タイトルバーをクリック(アクティブにする)
    // (処理中にマウスクリック等されてもできるだけ動作するようにループ内で毎回実施)
    MOUSEORG(0)
    IF width <> 0 THEN ACW(WID, pos_x, pos_y, width, height, 0) ELSE ACW(WID, pos_x, pos_y)
    MOUSEORG(WID)
    BTN(LEFT, CLICK, 50, 10, 40)
    SLEEP(0.5)  // ★修正要:タイミング調整

    // キャプチャ(ALT + ScreenShot)
    KBD(VK_ALT, DOWN, 40)
    KBD(VK_SNAPSHOT, CLICK, 40)
    KBD(VK_ALT, UP, 40)

    SLEEP(0.5)   // ★修正要:タイミング調整

    // ALT押下状態(タイトルバーとメニューの背景色が違えば)ALTをクリックし ALT押下状態を解除
    // (これが無いと次の ↓キーで ファイルメニュー部が表示される)
    menu_color = PEEKCOLOR(5, 40)
    IF title_color <> menu_color THEN KBD(VK_ALT, CLICK, 40)

    // 次ページ(↓キー)
    SLEEP(0.1)
    BTN(LEFT, CLICK, 50, 10, 0)
    KBD(VK_DOWN, CLICK, 30)

    // ページ切り替えを待つ
    // → ★PCの性能で必要な待ち時間が変わると思われるため時間は調整してください
    //      ・短すぎたら同じページが2回キャプチャされる
    //      ・長すぎたら完了までの時間が長くなる
    SLEEP(1)

    // ESCが押下されたら中断しループを抜ける
    IF GETKEYSTATE(VK_ESC) THEN BREAK
NEXT

スクリプト中の★については環境によって変更する箇所です。

画面(ウィンドウ)サイズを変更

「Kindle for PC」のウィンドウサイズ(キャプチャしたいサイズ)を決定し uwsc の[記録]を押下します。

「Kindle for PC」のウィンドウ タイトルバーを押下しuwscの[STOP]を押下します。

uwscの「保存」を押下します。

ファイル名を入力し保存します。

保存したスクリプトファイルをテキストエディタ(メモ帳等)で開きACWの引数を確認します。

ACW( ID, [x, y, 幅, 高さ, ms] )
引数
 ID: Windowを識別するID (0 であれば前回と同じ)
 x, y: Window位置
 幅, 高さ: Window幅, 高さ

以下の場合、幅=1693、高さ=1193 となります。

上記、uwscスクリプトの「画面位置サイズ(★ 変更要)」の幅と高さを変更します。

スクリプト(Kindle_capture.UWS)の実行

「Kindle for PC」 で電子書籍を開き先頭ページを表示します。

uwscの[読込み]を押下し、Kindle_capture.UWS を読み込みます。

uwscの[再生]を押下します。

電子書籍の種類を選択し[OK]を押下します。

キャプチャ回数を指定して[OK]を押下します。(最初は10ぐらいで正常に動作するか確認してください)

WinShot の保存フォルダにキャプチャした画像ファイルがあることを確認します。

キャプチャ回数(ページ数)について

「Kindle for PC」の画面下に、位置No. XX/XX という表示があります。

コミックについてはページ数になっているようです。なのでキャプチャ回数はページ数÷2になるはずですが、1ページ目と2ページ目が表紙になっているので+1回にしておいた方がいいです。

文庫についてはページ数ではないです。おそらくフォントサイズや行数を設定で変更できるため単純にページ数を判断できないのだと思います。

そのため、ページ数を出すには現在の位置No と何ページか先(例えば30ページ先)の位置No.から1ページあたり位置No がどれぐらい変化するかを求めて全体のページ数を出すしかないのですが、1ページ目~30ページ目 と31ページ目~60ページ目で変化する位置No が違うので正確なページ数は求められません。多めにキャプチャして後で削除するのが良さそうです。

次回は、今回キャプチャした画像のPDF化を行います。

コメント

  1. たると より:

    WinShotが必要と最初に書いてほしかったですね。

    また、ページ数が多いものを実行し、途中でやめたい場合もあるので
    ページ数を入力したあとのForループに
    If GetKeyState(Vk_Esc) Then Break
    と入力しEscを押したら抜けられるようにしたほうが良いと思います。

    • naotoshi より:

      コメントありがとうございます。WinShotとuwscのインストールは前回記事を参照するようにしました。Forループ中断も入れました。

  2. ダメ人間 より:

    コメント失礼します。ダウンロードしたのですが、↓からのやり方が初心者のためわからず困っております。

    よろしければ詳しく解説お願いしたいです💦

    各ページを自動でキャプチャするために、uwscのスクリプトを作成する必要があります。ベースになるスクリプトは以下の通りです。uwsc.exe と同じフォルダに Kindle_capture.UWS として保存してください。※Shift-JIS(CP932)で保存しないと正常に動作しないようです。

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