[AHK応用] Yahoo!翻訳の利用を半自動化
2018/04/07
英文を選択した状態でこの関数を呼び出すと、Yahoo!翻訳に選択している文字列をコピーして翻訳結果が得られます。
『翻訳』ボタンを押すために画像一致を使っているため、以下のファイルをスクリプトファイルと同一のディレクトリに置いてください。
どうやって実現するか
実現方法は単純です。
- 選択しているテキストをCtrl+Cでコピーする。
- Yahoo!翻訳のサイトを規定のブラウザで開く。
- レジストリから規定のブラウザを読み取ってブラウザの起動を待つ。
- ページが開かれるまで待つ。
- 「翻訳」ボタン(上にある画像)と一致する場所があるか探し、その左上にテキストを貼ってからボタンを押す。
これを一つ一つスクリプトにしています。
ソースコード
; --- Yahoo! ---
Yahoo_Translate()
{
; 英文の取得
ClipSaved := ClipboardAll
Clipboard =
Send, ^c
Clipwait, 1
if(ErrorLevel <> 0)
{
TrayTip, Yahoo!翻訳, 英文の取得に失敗しました。
return
}
; ページジャンプ
Run, http://honyaku.yahoo.co.jp/transtext/
; デフォルトブラウザを判定
RegRead, browserCommand, HKEY_CLASSES_ROOT, httpshellopencommand
RegExMatch(browserCommand, "^""(?P<Path>.*(?P<Name>[^]*?).[^.]*?)""", browser)
oBrowserClass := {"chrome":"ahk_class Chrome_WidgetWin_1"
, "firefox":"ahk_class MozillaWindowClass"
, "iexplore":"IEFlame"
, "Sleipnir":"^Sleipnir ahk_class MainWindow"} ;**
browserClass := oBrowserClass[browserName]
; ページ読み込みを待機
Sleep, 1000
; ウインドウタイトルに Yahoo!翻訳 が含まれるまで待機
Loop, 100
{
Sleep, 100
WinActivate, ahk_class %browserClass%
WinGetTitle, activeTitle, A
IfInString, activeTitle, Yahoo!翻訳
break
if(A_Index==100)
{
TrayTip, Yahoo!翻訳, ページ読み込みに失敗しました。
return
}
}
Loop, 30
{
Sleep, 300
WinGetPos, WinX, WinY, WinW, WinH, A
ImageSearch, imgX, imgY, 0, 0, WinW, WinH, YahooTranslate.png
if(ErrorLevel==0)
break
if(A_Index==30)
{
TrayTip, Yahoo!翻訳, ページ読み込みに失敗しました。
return
}
}
; さらに待機
Sleep, 1500
; マウスを移動して貼り付け
MouseGetPos, MouX, MouY
MouseMove, imgX-203, imgY-178, 0
MouseClick
Send, ^v
Sleep, 300
; 翻訳ボタンを押す
MouseMove, imgX+30, imgY+16, 0
MouseClick
MouseMove, MouX, MouY, 0
; クリップボードを戻す
Clipboard := ClipSaved
}
