読者です 読者をやめる 読者になる 読者になる

blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

ScanSnap Organizer で検索可能なPDFを生成しやすくするスクリプト

AutoHotkey

ScanSnap Organizer で検索可能なPDFを生成しやすくするために、AutoHotkey_L用スクリプトを作成した。特定のフォルダを選択中にキーを一回入力すれば(初期設定ではF12キー)、変換処理を自動的に開始して、変換処理が終了次第、終了を通知したウィンドウを自動的に閉じ、そして変換処理の結果をツールチップに数秒間表示する(初期設定では3秒)。ツールチップの表示例を以下に掲載しておこう。

このスクリプトを用いれば、ScanSnap Organizer のウィンドウが最前面にない場合でも、変換処理が終了したと通知するウィンドウを自動的に閉じることができる。どういうことか簡単に説明しておこう。検索可能なPDFを生成し終えたときにはScanSnap Organizerは通知ウィンドウを最前面に表示する。このように通知ウィンドウが万が一表示されないときでも、スクリプトによって、通知ウィンドウを適切に判別してから閉じるのである。
ソースは以下のとおりである。なお、このスクリプトはScanSnap Organizer V4.1L41で正常に動作している。他のバージョンでの動作状況は不明だ。

F10::
    ;; このスクリプトを終了させる
    ExitApp
return

F11::
    ;; scansnap organizer のウィンドウの存在を調べる
    GoSub, check_window_of_scansnap_organizer
    ;; 終了処理の検知と自動クリックを実行する
    GoTo, show_tooltip_and_close_window
return

;; フォルダ内のpdfをすべて検索可能なpdfへと変換する
;; pdfがある任意のフォルダをクリックした直後に実行すること
;; 選択中のフォルダの階層よりも下のフォルダにあるPDFは処理しない
F12::
    ;; scansnap organizer のウィンドウの存在を調べる
    GoSub, check_window_of_scansnap_organizer
    ;; 既存の設定通りに、検索可能なpdfへとすべてのpdfを変換する
    GoSub, create_searchable_pdf
    ;; 終了処理の検知と自動クリックを実行する
    GoTo, show_tooltip_and_close_window
return

check_window_of_scansnap_organizer:
    try
    {
        if not (WinExist("ScanSnap Organizer - "))
            throw "ScanSnap Organizer のウィンドウが見つかりません"
    }
    catch e
    {
        MsgBox, %e%
        Exit
    }
return

create_searchable_pdf:
    send,{tab}
    send,{right}^a
    send,{Appskey}
    loop,5
    {
        send,{down}
        sleep,50
    }
    send,{enter}
    sleep,100
    send,{enter}
return



show_tooltip_and_close_window:
    ;; 処理が終了した旨の通知を受け取ったら
    ;; 通知ウィンドウを自動的に閉じて、
    ;; tooltip にその情報を表示する
    loop
    {
        sleep,1000
        
        WHdl := WinExist("ScanSnap Organizer - 検索可能なPDFに変換")
        result_text := get_result(WHdl)
        
        if (result_text) {
            ControlSend,, {enter}, ahk_id %WHdl%
            tooltip,% result_text
            SetTimer, RemoveToolTip, 3000
        }
        
    } until (result_text)
return

RemoveToolTip:
    SetTimer, RemoveToolTip, Off
    ToolTip
return

get_result(WHdl) {
    if (WHdl) {
        WinGetText, result_text, ahk_id %WHdl%, 変換処理が終了しました。
        result_text := RegExReplace(result_text,"s)^.+。", "PDFの変換処理が終了!`n")
        result_text := RegExReplace(result_text,"キー", "`n$0")
        result_text := RegExReplace(result_text,"[`n`r]+(:)[`n`r]+", "`t$1 ")

        return result_text
    }
    
    return false
}