Advertisement
AZJIO

Автоматизация в QTranslate

Jun 21st, 2013
553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 3.52 KB | None | 0 0
  1.  
  2. ; переводит текст с помощью 3-х серверов
  3. #include <Misc.au3>
  4. #include <_HotKeyString_To_AutoitCode.au3>
  5.  
  6. ; Если не существует ini-файл, то создаём
  7. $ini = @ScriptDir & '\Setting.ini'
  8. If Not FileExists($ini) Then
  9.     $hFile = FileOpen($ini, 2)
  10.     FileWrite($hFile, '[Setting]' & @CRLF & 'HotKey=Alt+1')
  11.     FileClose($hFile)
  12. EndIf
  13.  
  14. $sHotKey = IniRead($ini, 'Setting', 'HotKey', 'Alt+1')
  15. $sHotKey = _HotKeyString_To_AutoitCode($sHotKey)
  16. If @error Then Exit MsgBox(0, 'Сообщение', 'Напутали вы с горячей клавишей')
  17.  
  18. HotKeySet($sHotKey, '_Action')
  19. TraySetIcon("shell32.dll", 42) ; Установка иконки
  20.  
  21. ; цикл держит скрипт запущенным
  22. While 1
  23.     Sleep(100000)
  24. WEnd
  25.  
  26. Func _Action()
  27.     TraySetIcon("shell32.dll", 48) ; Сигнализируем работу функции иконкой
  28.     $hWnd = WinGetHandle('QTranslate') ; Получаем дескриптор окна
  29.     If Not $hWnd Then Exit MsgBox(0, 'Сообщение', 'Окно QTranslate не найдено, завершаем скрипт') ; что зря в памяти висеть
  30.     Send('^{INS}') ; Копируем выделенный текст в буфер обмена
  31.     $sClipboard = ClipGet() ; Читаем буфер обмена в переменную
  32.     WinSetState($hWnd, '', @SW_RESTORE) ; Восстанавливаем окно
  33.     ControlSetText($hWnd, '', '[CLASS:RichEdit20W;INSTANCE:1]', $sClipboard) ; Вставляем текст для перевода
  34.     $sLink = ControlGetText($hWnd, '', '[CLASS:SysLink;INSTANCE:1]')
  35.     If StringInStr($sLink, 'Google Translate') Then ; Если текст сверху содержит "Google Translate", то
  36.         $sText1 = _GetTranslate('^{Enter}', $hWnd) ; Высылаем Ctrl + Enter
  37.     Else
  38.         $sText1 = _GetTranslate('^1', $hWnd) ; Высылаем Ctrl + 1
  39.     EndIf
  40.     If @error Then
  41.         TraySetIcon("shell32.dll", 42)
  42.         Return
  43.     EndIf
  44.     $sText2 = _GetTranslate('^2', $hWnd) ; Высылаем Ctrl + 2
  45.     $sText3 = _GetTranslate('^3', $hWnd) ; Высылаем Ctrl + 3
  46.     ControlSetText($hWnd, '', '[CLASS:RichEdit20W;INSTANCE:2]', $sText1 & @CRLF & $sText2 & @CRLF & $sText3) ; Вставляем 3 строки перевода
  47.     TraySetIcon("shell32.dll", 42)
  48. EndFunc   ;==>_Action
  49.  
  50. Func _GetTranslate($sSend, $hWnd)
  51.     Local $k, $sText
  52.     ControlSetText($hWnd, '', '[CLASS:RichEdit20W;INSTANCE:2]', '') ; Очищаем окно с переведённым текстом
  53.     SendKeepActive($hWnd) ; удерживаем окно активным
  54.     TraySetIcon("shell32.dll", 81) ; Иконки сигнализируют зажатие клавиши
  55.     _SendEx($sSend)
  56.     TraySetIcon("shell32.dll", 48)
  57.     SendKeepActive('') ; отпускаем удержиаемое окно
  58.     Do
  59.         Sleep(200) ; Каждые 0,2 сек проверяем наличие перевода
  60.         $sText = ControlGetText($hWnd, '', '[CLASS:RichEdit20W;INSTANCE:2]')
  61.         $k += 1
  62.         If $k > 25 Then Return SetError(1, 0, '') ; Вылет если время ожидания превысило 200 * 25 = 5000 = 5 сек
  63.     Until $sText ; Повторяем до тех пор пока не появится текст
  64.     Return $sText
  65. EndFunc   ;==>_GetTranslate
  66.  
  67. Func _SendEx($sSend_Data)
  68.     Local $hUser32DllOpen = DllOpen("User32.dll")
  69.     While _IsPressed("10", $hUser32DllOpen) Or _IsPressed("11", $hUser32DllOpen) Or _IsPressed("12", $hUser32DllOpen)
  70.         Sleep(30)
  71.     WEnd
  72.     Send($sSend_Data)
  73.     DllClose($hUser32DllOpen)
  74. EndFunc   ;==>_SendEx
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement