WSH で選択文字列を Google 検索

こないだ作った 選択文字列を Google 検索 だけど、こういう高レベルな機能は keyhac で頑張るよりも WSH でやった方がいい気がする。
まず、WSHクリップボードを扱う方法のまとめがこちら。

IE を叩く方法は重いらしい。SFC mini というコンポーネントを使って Win32 API を叩くのがよさげ。

てなわけで↓こんなんできました。Clipboard.vbs の中身は↑Fio さんが作られた Class Clipboard です。

copy_and_search.wsf

<!-- コピーして Web 検索 -->
<package>
    <job id="navigate">
        <script language="VBScript" src="Clipboard.vbs"></script>
        <script language="VBScript">
            set args = WScript.Arguments
            set sh   = WScript.CreateObject("WScript.Shell")
            set cb   = New Clipboard
            
            sh.SendKeys "^c"
            WScript.Sleep 100
            text = Trim(cb.Text)
            sh.Run args(0) & urlencode(text)
            
            function urlencode(src)
                for i = 1 to Len(src)
                    c = Mid(src, i, 1)
                    if InStr(" !""#$%&'()*+,-./:;<=>?@[\]^_`{|}~", c) > 0 then
                        dst = dst & "%" & UCase(Hex(AscW(c)))
                    else
                        dst = dst & c
                    end if
                next
                urlencode = dst
            end function
        </script>
    </job>
</package>
使い方

文字列を選択した状態で次のようなコマンドを実行する。引数にシェルの特殊文字が含まれる場合は ^ でエスケープすること。

copy_and_search.wsf "http://www.google.com/search?num=100&q="

しかしこの方法、長い (制御コードを含む?) 文字列をコピーすると高確率で WScript.exe が落ちますな。むぐぐ。