Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; переводит текст с помощью 3-х серверов
- #include <Misc.au3>
- #include <_HotKeyString_To_AutoitCode.au3>
- ; Если не существует ini-файл, то создаём
- $ini = @ScriptDir & '\Setting.ini'
- If Not FileExists($ini) Then
- $hFile = FileOpen($ini, 2)
- FileWrite($hFile, '[Setting]' & @CRLF & 'HotKey=Alt+1')
- FileClose($hFile)
- EndIf
- $sHotKey = IniRead($ini, 'Setting', 'HotKey', 'Alt+1')
- $sHotKey = _HotKeyString_To_AutoitCode($sHotKey)
- If @error Then Exit MsgBox(0, 'Сообщение', 'Напутали вы с горячей клавишей')
- HotKeySet($sHotKey, '_Action')
- TraySetIcon("shell32.dll", 42) ; Установка иконки
- ; цикл держит скрипт запущенным
- While 1
- Sleep(100000)
- WEnd
- Func _Action()
- TraySetIcon("shell32.dll", 48) ; Сигнализируем работу функции иконкой
- $hWnd = WinGetHandle('QTranslate') ; Получаем дескриптор окна
- If Not $hWnd Then Exit MsgBox(0, 'Сообщение', 'Окно QTranslate не найдено, завершаем скрипт') ; что зря в памяти висеть
- Send('^{INS}') ; Копируем выделенный текст в буфер обмена
- $sClipboard = ClipGet() ; Читаем буфер обмена в переменную
- WinSetState($hWnd, '', @SW_RESTORE) ; Восстанавливаем окно
- ControlSetText($hWnd, '', '[CLASS:RichEdit20W;INSTANCE:1]', $sClipboard) ; Вставляем текст для перевода
- $sLink = ControlGetText($hWnd, '', '[CLASS:SysLink;INSTANCE:1]')
- If StringInStr($sLink, 'Google Translate') Then ; Если текст сверху содержит "Google Translate", то
- $sText1 = _GetTranslate('^{Enter}', $hWnd) ; Высылаем Ctrl + Enter
- Else
- $sText1 = _GetTranslate('^1', $hWnd) ; Высылаем Ctrl + 1
- EndIf
- If @error Then
- TraySetIcon("shell32.dll", 42)
- Return
- EndIf
- $sText2 = _GetTranslate('^2', $hWnd) ; Высылаем Ctrl + 2
- $sText3 = _GetTranslate('^3', $hWnd) ; Высылаем Ctrl + 3
- ControlSetText($hWnd, '', '[CLASS:RichEdit20W;INSTANCE:2]', $sText1 & @CRLF & $sText2 & @CRLF & $sText3) ; Вставляем 3 строки перевода
- TraySetIcon("shell32.dll", 42)
- EndFunc ;==>_Action
- Func _GetTranslate($sSend, $hWnd)
- Local $k, $sText
- ControlSetText($hWnd, '', '[CLASS:RichEdit20W;INSTANCE:2]', '') ; Очищаем окно с переведённым текстом
- SendKeepActive($hWnd) ; удерживаем окно активным
- TraySetIcon("shell32.dll", 81) ; Иконки сигнализируют зажатие клавиши
- _SendEx($sSend)
- TraySetIcon("shell32.dll", 48)
- SendKeepActive('') ; отпускаем удержиаемое окно
- Do
- Sleep(200) ; Каждые 0,2 сек проверяем наличие перевода
- $sText = ControlGetText($hWnd, '', '[CLASS:RichEdit20W;INSTANCE:2]')
- $k += 1
- If $k > 25 Then Return SetError(1, 0, '') ; Вылет если время ожидания превысило 200 * 25 = 5000 = 5 сек
- Until $sText ; Повторяем до тех пор пока не появится текст
- Return $sText
- EndFunc ;==>_GetTranslate
- Func _SendEx($sSend_Data)
- Local $hUser32DllOpen = DllOpen("User32.dll")
- While _IsPressed("10", $hUser32DllOpen) Or _IsPressed("11", $hUser32DllOpen) Or _IsPressed("12", $hUser32DllOpen)
- Sleep(30)
- WEnd
- Send($sSend_Data)
- DllClose($hUser32DllOpen)
- EndFunc ;==>_SendEx
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement