[AHK応用] Yahoo!翻訳の利用を半自動化

      2018/04/07

英文を選択した状態でこの関数を呼び出すと、Yahoo!翻訳に選択している文字列をコピーして翻訳結果が得られます。

『翻訳』ボタンを押すために画像一致を使っているため、以下のファイルをスクリプトファイルと同一のディレクトリに置いてください。

YahooTranslate

SPONSORED LINK

どうやって実現するか

実現方法は単純です。

  1. 選択しているテキストをCtrl+Cでコピーする。
  2. Yahoo!翻訳のサイトを規定のブラウザで開く。
    • レジストリから規定のブラウザを読み取ってブラウザの起動を待つ。
  3. ページが開かれるまで待つ。
  4. 「翻訳」ボタン(上にある画像)と一致する場所があるか探し、その左上にテキストを貼ってからボタンを押す。

これを一つ一つスクリプトにしています。

SPONSORED LINK

ソースコード

; --- 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
}

itjo レスポンシブ 本文下

 - AutoHotkey
 - , ,