AutoHotKeyでOperaの選択テキスト内のURLを一気に開く

http://www.google.co.jp/ ttp://search.yahoo.co.jp/
://search.msn.co.jp/

こーいったリンクされていないURLをまとめて開きたい。

ただ単に選択テキストをコピーしてahkに渡しつつ、正規表現でURLっぽいのをゲットして、そのままOperaにコマンドラインで渡せばできね?

と思ったら、渡した分だけウインドウが作られてしまった。現在開いているOperaに新しいタブとして追加させるにはDDEで渡すしかないっぽいが、AutoHotKeyでDDEを扱う方法が分からなかったので、力技でやることにした。

;menu.ini
[Hotclick Popup Menu]
Item, "選択テキスト内のURLを全て開く" = Copy & Execute program, "C:\ahk\AutoHotkey.exe", "C:\ahk\openallurl.ahk"

;openalllink.ahk
#NoTrayIcon

lines := RegExReplace( Clipboard, "(`r`n)+", "`r")

Loop, parse, lines, `r,
{
    match_result := RegExMatch( A_LoopField, "t?p?s?:?//([-_.!~*'()a-zA-Z0-9;/?:@&=+$,`%#]+)", $ )
    If match_result != 0
    {
        Clipboard = http://%$1%
        wait( 10 )
        Send, {LCtrl Down}t{LCtrl Up} ;新しいタブ
        wait( 40 )
        Send, {LCtrl Down}b{LCtrl Up} ;貼り付けて移動
        wait( 40 )
    }
}

wait( time ) {
    begin := A_TickCount
    Loop
    {
        if A_TickCount - begin > time
        break
    }
}

何をしているのかというと、選択テキストを改行で分解してURLっぽいのをゲット。ここまでは良い。その後は・・・

  1. ゲットしたURLをクリップボードに入れる
  2. 強制的にCtrl+Tを発生させて新しいタブを表示させる
  3. 強制的にCtrl+Bを発生させてクリップボード内のURLを貼り付けて移動させる
  4. 1~3を繰り返す

こんなんで本当に大丈夫なのか? と思ったが、どうやらCPUを他に取られていると新しいタブの生成や貼り付けてからの移動で微妙に時間を取ってしまい、次の入力がズレてしまう時があったのでwaitを入れることにした。上手く開かない時はwaitの数字を大きく設定する。waitがちゃんと入っていればしっかり開かれるようだ。

正規表現はPerlメモから拝借した。非リンクだけじゃなくh抜き等にも対応するため、最低限スラッシュ2個さえあれば反応するようにしてる。そこら辺で不都合があるなら適当に弄るといいだろう。

openallurl.ahk

追記1

選択範囲のソースを取得できることをすっかり忘れてた。というわけでJavaScriptで全て解決するっぽいのでがんばる。

一応ahk経由だとポップアップブロックが発生しないというメリットが一応あるんだがな。そこら辺は使う人次第か。

追記2

渡した分だけウインドウが作られたって書いたけど、設定を良く見たらSDIにチェックが入っているせいだった。チェック外してみたところ、コマンドラインでも普通にタブが開いた。