Code: Select all
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
SetTitleMatchMode, 3
ToolTipVisible = 0
Gui, 1:Add, Text, x10 y15 vTb1, Source language:
Gui, 1:Add, Combobox, x+20 yp-3 vLangIn, auto||en|ru|uk
Gui, 1:Add, Text, x10 y+15 vTb2, Target language:
Gui, 1:Add, Combobox, x+22 yp-3 vLangOut, en|ru|uk||
Gui, 1:Add, Checkbox, x10 y+20 Checked vPaste2CB, Paste translation to clipboard when closing tooltip
Gui, 1:Add, Checkbox, x10 y+15 Checked vHideToolTip, Hide tooltip on mouseclick
Gui, 1:Add, Button, x30 y+20 w80 vB1, &Exit
Gui, 1:Add, Button, x+30 w80 Default vB2, &OK
Gui, 1:Show, Autosize
Return
ButtonExit:
GuiEscape:
GuiClose:
ExitApp
ButtonOK:
Gui, 1:Submit
Return
; [Ctrl]+[Alt]+[F11] shows the little user interface for changing source and target language
^!F11::
Gui, 1:Show, Autosize
Return
~RButton::
~MButton::
~LButton::
If HideToolTip = 0
Return
If ToolTipVisible = 1
{
ToolTip
ToolTipVisible = 0
Return
}
Return
; [Ctrl]+[F11] runs DeepL translator for selected text or makes the tooltip with the translation disappear if it is visible
^F11::
If ToolTipVisible = 1
{
ToolTip
ToolTipVisible = 0
Return
}
CurrentCB = %Clipboard%
Clipboard =
SendInput, ^c
ClipWait, 5
If ErrorLevel
{
MsgBox, 48, DeepLTranslateSelection, No text highlighted or problem copying text to clipboard.
Return
}
Source = %Clipboard%
StringLen, SourceLength, Source
SourceLength := SourceLength * 5
ToolTip, Translating... please wait ☺., % A_CaretX-SourceLength, % A_CaretY+50
Target =
Target := DeepLTranslate(Source,LangIn,LangOut)
ToolTip, %Target%, % A_CaretX-SourceLength, % A_CaretY+50
ToolTipVisible = 1
If Paste2CB = 1
Clipboard = %Target%
Else
Clipboard = %CurrentCB%
Return
DeepLTranslate(Source,LangIn,LangOut)
{
StringReplace, Source, Source, %A_Space%, `%20, All
Base := "https://www.deepl.com/translator"
Path := Base . "/" . LangIn . "-" . LangOut . "/" . Source
IE := ComObjCreate("InternetExplorer.Application") ; Creation of hidden IE instance to look up DeepL Translate and retrieve translation
IE.Navigate(Path)
While IE.readyState!=4 || IE.document.readyState!="complete" || IE.busy
Sleep 250
Result := ""
btns := IE.document.getElementsByClassName("lmt__translations_as_text__text_btn")
if (btns.length > 0) {
Result := btns[0].innerText
}
IE.Quit
Return Result
}