AutoHotkeyでChromeのブックマーク情報をぶっこ抜く


😺はじめに

皆さんはブラウザのブックマークをよく使いますか?
バリバリ活用してる人なんかだと、ブックマーク数が1000を超えて、フォルダ分けやタイトル付けに凝る人もいると思います。
そうやってブックマークが充実すればするほど、その情報をブラウザ外からも活用したくなりますよね??(圧)

もちろんエクスポートして活用する道もありますが、ブックマークマネージャで選択中のブックマークから情報を取得したいこともあります。

ここでは、ブックマークのタイトルが色んな形式で書かれているものとし、そこから情報を抜き出す単純なタスクをAutoHotkeyで実装してみましょう。これが出来ればコマンドライン引数に用いるなどして、色んなことができますね。

🐺ブックマークマネージャを表示しているかの検知

「ブックマーク - Google Chrome」というウィンドウ名を検知したいというので、まずこう書いてみます。

sample1.ahk
#If WinActive("ブックマーク - Google Chrome ahk_exe chrome.exe")
;any code here
#If

しかし、これではマッチ形式が明示的に指定されていないので、例えば「はてなブックマーク - Google Chrome」を開いたウィンドウにもヒットしてしまう場合があります。そこでこうします。

mylib1.ahk
Set_TitleMatchMode(x){
    SetTitleMatchMode, %x%
    return 1
}
sample2.ahk
#Include <mylib1>

#If Set_TitleMatchMode(3) and WinActive("ブックマーク - Google Chrome ahk_exe chrome.exe")
;any code here
#If

🐘ypで商品名をコピー、ymでメーカー名をコピー、みたいな処理

例えばあるフォルダ下では色んな商品の記事をブクマしている。その中のあるブクマを選択した状態で「yp」と入力すると商品名をコピーし、「ym」と入力するとメーカー名をコピーできる、というような処理を実装しましょう。

タイトルは次の形式とします。

{商品名}◆{メーカー名}

コードはこうなります。

sample3.ahk
y::
Input, c, L1 T2, {Enter},p,m
if(ErrorLevel = "Match"){
    if c in p,m
    {
        n := ({"p": 1, "m": 2})[c]
        SendInput, {AppsKey}
        Sleep, 10
        SendInput, {Down}{Enter}
        clipboard :=
        SendInput, ^c
        clipwait, 1
        If(ErrorLevel){
            MsgBox, failed to copy
        }else{
            SendInput, {Enter}
            RegExMatch(clipboard, "O)^(.+)◆(.+)$", mat)
            clipboard :=
            clipboard := mat[n]
            clipwait, 1
        }
    }
}
return

🐾さいごに

この要領でタイトルやURLを解析して色んなコピーが可能ですね。ここではL1をInputに指定しているので1文字だけの入力を待機していますが、L2にして1文字目でブックマークの種別を指定して2文字目でコピー対象の種別を指定するといった処理も可能です。