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

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

はじめに

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

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

楽天Koboの電子書籍をPCで見るためのアプリ「楽天Koboデスクトップアプリ」を起動した状態でキャプチャした画像は全面黒一色になるので、仮想環境(Hyper-VやVMWare等)で動くWindowsや、別のWindowsPC(リモートデスクトップやVNCができるPC)が必要になります。

私は VMWareに Windows10をインストールしました。

以降、おおもとのWindowsを「ホストOS」、仮想環境やリモートのWindowsを「ゲストOS」と表記します。ご自身の環境に合わせて読み替えてください。

※タイミングを合わせてキャプチャする必要があるため、「ホストOS」と「ゲストOS」の時刻を合わせておく必要があります。

「ゲストOS」の設定

楽天Koboデスクトップアプリのインストール

「ゲストOS」に「楽天Koboデスクトップアプリ」(無料ソフト)をインストールします。

ダウンロード

楽天Koboヘルプ にアクセスし、「こちらのページ」を押下します。

「Windows」を押下すると楽天Koboのインストーラ「kobosetup.exe」がダウンロードされます。

インストール

ダウンロードした「kobosetup.exe」を実行し、以下の画面が表示されたら「はい」を押下します。

ログイン

インストール完了したら以下の画面が表示されるので、「ログインまたは会員登録」を押下します。

ID、パスワードを入力し、「ログイン」を押下します。

uwscのインストール

uwscはWindows操作の自動化を行うソフトです。第1回記事を見てインストールしてください。

自動でページ切り替え

uwscスクリプト(ベース)

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

メモ帳で保存する場合

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

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

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

WID = GETID("楽天Koboデスクトップ")
IF WID < 0 then
    MSGBOX("楽天Koboデスクトップ が起動していません")
    EXIT
ENDIF

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

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

next_page_key_select = SLCTBOX(SLCT_RDO, 0, "ページ切り替えのキーを選択してください", "←:左矢印", "→:右矢印")
SELECT next_page_key_select
    CASE SLCT_1
        next_key = VK_LEFT
    CASE SLCT_2
        next_key = VK_RIGHT
SELEND

// ページ切り替え間隔を入力
sleep_sec = 0
WHILE TRUE
    sleep_sec_str = INPUT("ページ切り替え間隔(秒)を入力してください")
    IFB VARTYPE(sleep_sec_str) = VAR_EMPTY
        EXIT    // [キャンセル]
    ELSE
        sleep_sec = VAL(sleep_sec_str)
        IFB sleep_sec = ERR_VALUE 
            CONTINUE    // 入力エラー(数字以外)
        ENDIF
        BREAK
    ENDIF
WEND

MSGBOX("キャプチャの準備([矩形範囲設定]まで)を実施後 OKを押下してください。")

ACW(WID,1,1)
BALLOON("キャプチャを開始してください。10秒後にページ切り替えを開始します。")
SLEEP(10)
BALLOON()

WHILE TRUE
    GETTIME()
    n = G_TIME_SS MOD sleep_sec
    IFB n = 0 THEN
        // 時刻(秒)を間隔(秒)で割った余りが 0 のときページ切り替え
        //   3秒間隔 = 0,3,6,・・・・,57
        //   4秒間隔 = 0,4,8,・・・・,56
        IF width <> 0 THEN ACW(WID, pos_x, pos_y, width, height, 0) ELSE ACW(WID, pos_x, pos_y)
        BTN(LEFT, CLICK, 50, 10, 40)
        SLEEP(0.1)

        KBD(next_key, CLICK, 10)

        // 時刻(秒)が変わるのを待つ
        SLEEP(1.2)
    ELSE
        SLEEP(0.1)
    ENDIF
WEND

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

「楽天Koboデスクトップアプリ」の画面サイズと位置を変更

「楽天Koboデスクトップアプリ」のウィンドウサイズ(キャプチャしたいサイズ)を決定し uwscを起動しuwscの[記録]を押下します。(以下の画像はコミックの場合)

「楽天Koboデスクトップアプリ」のウィンドウ タイトルバーを押下しuwscの[STOP]を押下します。

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

uwscスクリプト保存ボタン

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

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

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

以下の場合、X=1、Y=1、幅=1576、高さ=1199 となります。

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

同様の手順で小説の場合の画面サイズを変更します。

「ホストOS」の設定

WinShotとuwscのインストール

WinShotはスクリーンキャプチャソフト、uwscはWindows操作の自動化を行うソフトです。第1回記事を見てインストールしてください

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

uwscスクリプト(ベース)

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

メモ帳で保存する場合

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

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

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

// VMware の WindowID を取得
WID = GETID("Win10 - VMware Workstation") // ウィンドウタイトル(★変更要)
IF WID < 0 then
    MSGBOX("VMware が起動していません")
    EXIT
ENDIF
ACW(WID, 1, 1, 1922, 1257, 0)  // VMwareの画面位置サイズ(★ 変更要)

// メモ帳起動について
//   VMwareがアクティブの時に、(CTRL + ALT + F7)でキャプチャしようとしてもキャプチャできない。
//   おそらくキー入力が VMware側のOSに取られてしまうのではないかと思われる。
//   キャプチャ前にメモ帳をアクティブ(VMwareを非アクティブ)にすることで対応。
//  (★メモ帳以外のアプリに変更してもOKです。普段使用しないものがいいかも)
SLEEP(0.2)
NOTEPAD_WID = GETID("メモ帳")
IFB NOTEPAD_WID < 0 THEN
    EXEC("notepad.exe")
    NOTEPAD_WID = GETID("メモ帳")
    IFB NOTEPAD_WID < 0 THEN
        MSGBOX("メモ帳を起動できません")
        EXIT
    ENDIF
ENDIF
ACW(NOTEPAD_WID, 1995, 70, 300, 225, 0) // ★変更要:メモ帳の位置サイズ

book_type = SLCTBOX(SLCT_RDO, 0, "キャプチャする本の種類を選択してください", "コミック", "文庫")
SELECT book_type
    CASE SLCT_1
        // コミック:画面位置(左上、右下)(★ 変更要)
        pos_x1 = 4
        pos_y1 = 173
        pos_x2 = 1578
        pos_y2 = 1255
    CASE SLCT_2
        // 文庫:画面位置(左上、右下)(★ 変更要)
        pos_x1 = 100
        pos_y1 = 181
        pos_x2 = 848
        pos_y2 = 1219
SELEND

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

MSGBOX("WinShotの [矩形範囲設定] - [前回の矩形範囲修正] で (" + pos_x1 + "," + pos_y1 + ") (" + pos_x2 + "," + pos_y2 + ")を設定後、OKを押下してください")
MSGBOX("キャプチャを開始します。ページ切り替え開始後、OKを押下してください")

BALLOON(sleep_sec + "秒間隔でキャプチャしています。ESC押下で終了できます")
SLEEP(1)

WHILE TRUE
    GETTIME()
    n = G_TIME_SS MOD sleep_sec
    IFB n = 2 THEN
        // 現在時刻(秒)を間隔(秒)で割った余りが 2 のときキャプチャ
        //   3秒間隔 = 2,5,8,・・・・,59
        //   4秒間隔 = 2,6,10,・・・・,58

        // VMwareを非アクティブ化 (VMware がアクティブだとキャプチャできない)
        ACW(NOTEPAD_WID, 1995, 70, 300, 225, 0)
        SLEEP(0.1)

        // キャプチャ(CTRL + ALT + F7)
        KBD(VK_CTRL,DOWN,40)
        KBD(VK_ALT,DOWN,0)
        KBD(VK_F7,CLICK,40)
        KBD(VK_ALT,UP,40)
        KBD(VK_CTRL,UP,0)

        IF GETKEYSTATE(VK_ESC) THEN BREAK

        // 現在時刻(秒)が変わるのを待つ
        SLEEP(1.2)
    ENDIF

    // 「楽天Koboデスクトップ」の「ライブラリ」の下のバーの色で終了するかどうか判断する
    red_color = PEEKCOLOR(160, 137, COL_R)   // バーの位置(★ 変更要)
    IFB red_color < 200 THEN
        // 楽天Kobo のメニュー部「ライブラリ」の下が朱色になったら終了
        // RGB の R で判断
        //    ページ切り替え中 = 灰色 245
        //    ページ切り替え終了 = 朱色 191
        BREAK
    ENDIF

    SLEEP(0.1)
WEND

// メモ帳を終了
CTRLWIN(NOTEPAD_WID, CLOSE)

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

「ゲストOS」のウィンドウタイトルとサイズを変更

「ゲストOS」を起動後、uwscを起動しuwscの[記録]を押下します。

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

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

uwscスクリプト保存ボタン

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

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

GETID(タイトル, [クラス名, 待ち時間秒, MDI子タイトル])
引数
タイトル: 識別したいウィンドウのタイトル (タイトルの一部分だけでもOK)

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

以下の場合、X=1、Y=1、幅=1922、高さ=1257 となります。

上記、uwscスクリプトの「ウィンドウタイトル(★ 変更要)」のウィンドウタイトル、「VMwareの画面位置サイズ(★ 変更要)」の位置(X, Y)と幅と高さを変更します。

キャプチャする位置(左上、右下)を変更

「ホストOS」でデスクトップをキャプチャし、コミックの左上と右下の座標を確認します。

キャプチャした画像をペイントで開き、以下のように①拡大→②マウスカーソルの位置合わせ→③左下に表示されている座標確認を行ってください。

上記、uwscスクリプトの「画面位置(左上、右下)(★ 変更要)」を変更します。

同様の手順で小説の画面位置を変更します。

キャプチャ終了を判断するためのライブラリの下のバーの位置を変更

「楽天Koboデスクトップアプリ」は最後のページで次ページを選択すると「ライブラリ」に戻ります。そのとき、メニュー部「ライブラリ」の下が朱色のバーになるので、それを判断してキャプチャ終了します。

メニュー部「ライブラリ」の下の朱色のバーの位置を確認します。

上記、uwscスクリプトの「バーの位置(★ 変更要)」を変更します。

メモ帳のウィンドウサイズと位置を変更

メモ帳起動について
VMwareがアクティブの時に、WinShotの(CTRL + ALT + F7)でキャプチャしようとしてもキャプチャできません。おそらくキー入力が VMware側のOSに取られてしまうのではないかと思われます。
キャプチャ前にメモ帳をアクティブ(VMwareを非アクティブ)にすることで対応します。

メモ帳を起動しキャプチャの邪魔にならない位置とサイズにします。

uwscを使用してメモ帳のサイズと位置を確認します。やり方は上記「「ゲストOS」のウィンドウタイトルとサイズを変更」と同様です。

上記、uwscスクリプトの「★変更要:メモ帳の位置サイズ」を変更します。

WinShotの矩形範囲キャプチャの設定

本の種類(コミック、小説等)によってキャプチャする範囲を変更する必要があります。

WinShotの矩形範囲キャプチャの設定は、まずタスクトレイのWinShotアイコン上で右クリックします。

左上と右下の座標を設定し、「OK」を押下します。

キャプチャ実行

UWSC実行

本の種類、ページ切り替えに使用するキー、キャプチャ間隔(3または4)を選択します。

※キャプチャ間隔について(私の環境の場合)
 「楽天Koboデスクトップアプリ」は「章」の切り替え時に一瞬待ち時間があるため4秒必要。「章」がないコミックは3秒間隔でキャプチャ可能でした。

矩形範囲設定

ホストOSでWinShotの矩形範囲設定を行います。

ページ切り替えとキャプチャ開始

同じキャプチャ画像を削除

キャプチャ開始と終了のタイミングにより最初と最後の数枚が同じ画像になる場合があります。WinShotの保存先を確認して同じ画像は削除してください。

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

コメント

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