#AutoIt3Wrapper_Outfile=GoogleTranslator.exe #AutoIt3Wrapper_Icon=GoogleTranslator.ico #AutoIt3Wrapper_Compression=4 #AutoIt3Wrapper_UseAnsi=y #AutoIt3Wrapper_Res_Comment= #AutoIt3Wrapper_Res_Description=GoogleTranslator.exe #AutoIt3Wrapper_Res_Fileversion=0.1.0.0 #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=n #AutoIt3Wrapper_Res_LegalCopyright=AZJIO #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Run_Au3check=n #AutoIt3Wrapper_Res_Field=Version|0.1 #AutoIt3Wrapper_Res_Field=Build|2011.10.11 #AutoIt3Wrapper_Res_Field=Coded by|AZJIO #AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time% #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer% #AutoIt3Wrapper_Run_Obfuscator=y #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0 #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3" ; параллельная разработка AZJIO, ViSiToR, UDF от Stephen Podhajecki, Google Functions от Beege ; ресайз, хоткей поддерживаются, автофокус поля Edit #include <WindowsConstants.au3> #include <Inet.au3> #include <Encoding.au3> #include <ComboConstants.au3> #NoTrayIcon Opt("GUIResizeMode", 802) $GUI = GUICreate("Google - переводчик", 420, 390, -1, -1, $WS_OVERLAPPEDWINDOW) If Not @compiled Then GUISetIcon('GoogleTranslator.ico', 0) $StatusBar = GUICtrlCreateLabel("", 5, 390-20, 410-100, 17) GUICtrlSetFont(-1, 10, 800) GUICtrlSetColor(-1, 0x0000FF) GUICtrlSetResizing(-1, 512 + 256 + 2) GUICtrlCreateLabel("Выберите язык исходного текста:", 10, 12) GUICtrlSetResizing(-1, 512 + 256 + 32 + 4) $Lang_Combo1 = GUICtrlCreateCombo("", 190, 10, 200, 50, BitOr($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST)) GUICtrlSetResizing(-1, 512 + 256 + 32 + 4) GUICtrlCreateLabel("Выберите язык перевода:", 10, 37) GUICtrlSetResizing(-1, 512 + 256 + 32 + 4) $Lang_Combo2 = GUICtrlCreateCombo("", 190, 35, 200, 50, BitOr($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST)) GUICtrlSetResizing(-1, 512 + 256 + 32 + 4) _SetCombo() $nRe = GUICtrlCreateButton("^v", 395, 10, 20, 48) GUICtrlSetResizing(-1, 512 + 256 + 32 + 4) GUICtrlSetTip(-1, 'Инвертировать направление перевода.') $nInv = GUICtrlCreateButton("^", 315, 210, 20, 20) GUICtrlSetTip(-1, 'Переместить текст, иногда'&@CRLF&'полезно не zh>ru, а zh>en>ru.'&@CRLF&'Ctrl+Стрелка вниз') $Test = GUICtrlCreateButton("Проверка", 340, 210, 70, 20) GUICtrlSetTip(-1, 'Проверка обратным'&@CRLF&'переводом текста.'&@CRLF&'Ctrl+Стрелка вверх') ; $SelFunc= GUICtrlCreateCheckbox('Другой метод', 164, 210, 120, 17) ; GUICtrlSetState(-1, 1) $Clr = GUICtrlCreateButton("Очистить", 145, 60, 70, 20) GUICtrlSetResizing(-1, 512 + 256 + 32 + 4) GUICtrlSetTip(-1, 'Ctrl+Delete') $Translate1 = GUICtrlCreateButton("Очистить > Вставить > Перевести", 220, 60, 190, 20) GUICtrlSetResizing(-1, 512 + 256 + 32 + 4) GUICtrlSetTip(-1, 'Ctrl+Enter') GUICtrlCreateLabel("Исходный текст:", 10, 64, -1, 17) $Edit1 = GUICtrlCreateEdit('', 10, 80, 400, 130, 0x0004+0x0040+0x1000+0x00200000) GUICtrlSetData(-1, 'Переводчик имеет ограничение по количеству символов: 350-376.'&@CRLF&'Есть возможность выполнить обратный перевод для проверки качества.') ; закомментировать эту строку, она для теста GUICtrlSetState(-1, 256) $L2=GUICtrlCreateLabel("Результат перевода:", 10, 214, -1, 17) $Edit2 = GUICtrlCreateEdit("", 10, 230, 400, 130, 0x0004+0x0040+0x1000+0x00200000) ; GUICtrlSetFont (-1,-1, -1, -1, 'Arial') $Translate = GUICtrlCreateButton("Перевести", 340, 360, 70, 25) GUICtrlSetResizing(-1, 512 + 256 + 64 + 4) GUICtrlSetTip(-1, 'Ctrl+Enter') Dim $AccelKeys[4][2] = [["^{Enter}", $Translate],["^{UP}", $Test],["^{DEL}", $Clr],["^{DOWN}", $nInv]] GUISetAccelerators($AccelKeys) GUISetState() GUIRegisterMsg(0x05 , "WM_SIZE") GUIRegisterMsg(0x0024, "WM_GETMINMAXINFO") ; GUIRegisterMsg($WM_WINDOWPOSCHANGING , "WM_WINDOWPOSCHANGING") Send('^+{HOME}') While 1 $nMsg = GUIGetMsg() Switch $nMsg Case -3 Exit Case $Clr GUICtrlSetData($Edit1, '') GUICtrlSetState($Edit1, 256) Case $nRe $Lang_Combo01=GUICtrlRead($Lang_Combo1) $Lang_Combo02=GUICtrlRead($Lang_Combo2) GUICtrlSetData($Lang_Combo1, $Lang_Combo02) GUICtrlSetData($Lang_Combo2, $Lang_Combo01) Case $Test If GUICtrlRead($Test)='Проверка' Then $Text = GUICtrlRead($Edit2) $Lang1 = StringRegExpReplace(GUICtrlRead($Lang_Combo2), " - .*$", '') $Lang2 = StringRegExpReplace(GUICtrlRead($Lang_Combo1), " - .*$", '') If $Text = '' Then MsgBox(0, 'Message', 'Нечего переводить.') ContinueLoop EndIf If $Lang1 = $Lang2 Then MsgBox(0, 'Сообщение', 'Укажите разные направления перевода.') ContinueLoop EndIf GUICtrlSetBkColor($Edit2, 0xffd7d7) GUICtrlSetState($Translate, 128) GUICtrlSetState($Test, 128) GUICtrlSetData($StatusBar, "Пожалуйста подождите...") ; If GUICtrlRead($SelFunc)=1 Then ; $Result = _GoogleTranslate($Text, $Lang1, $Lang2) ; Else $Result = _GoogleTranslateString($Text, $Lang1 & "|" & $Lang2, True) ; EndIf GUICtrlSetData($Edit2, $Result) GUICtrlSetState($Translate, 64) GUICtrlSetState($Test, 64) GUICtrlSetData($StatusBar, "Готово") GUICtrlSetData($Test, 'Отмена') GUICtrlSetBkColor($Edit2, 0xffffff) Else GUICtrlSetData($Edit2, $Text) GUICtrlSetData($Test, 'Проверка') EndIf Case $nInv GUICtrlSetData($Edit1, GUICtrlRead($Edit2)) Case $Translate1 GUICtrlSetData($Edit1, '') GUICtrlSetState($Edit1, 256) Send('+{INS}') Sleep(100) ContinueCase Case $Translate $Text = GUICtrlRead($Edit1) $Lang1 = StringRegExpReplace(GUICtrlRead($Lang_Combo1), " - .*$", '') $Lang2 = StringRegExpReplace(GUICtrlRead($Lang_Combo2), " - .*$", '') If $Text = '' Then MsgBox(0, 'Message', 'Нечего переводить.') ContinueLoop EndIf If $Lang1 = $Lang2 Then MsgBox(0, 'Сообщение', 'Укажите разные направления перевода.') ContinueLoop EndIf $kolSim =StringLen($text) If $kolSim>376 And MsgBox(4, 'Сообщение', 'Превышено максимальное количество символов, обрезать?'&@CRLF&'Допустимо 350-376 (текущее: ' & $kolSim & ')')=6 Then $text=StringMid($text, 1, 376) GUICtrlSetBkColor($Edit2, 0xffd7d7) GUICtrlSetState($Translate, 128) GUICtrlSetState($Test, 128) GUICtrlSetData($StatusBar, "Пожалуйста подождите...") ; If GUICtrlRead($SelFunc)=1 Then ; $Result = _GoogleTranslate($Text, $Lang1, $Lang2) ; Else $Result = _GoogleTranslateString($Text, $Lang1 & "|" & $Lang2, True) ; EndIf GUICtrlSetData($Edit2, $Result) GUICtrlSetState($Translate, 64) GUICtrlSetState($Test, 64) GUICtrlSetData($Test, 'Проверка') GUICtrlSetData($StatusBar, "Готово") GUICtrlSetBkColor($Edit2, 0xffffff) If GUICtrlRead($Edit2)='' Then $Ping=Ping('translate.google.ru', 250) If $Ping Then MsgBox(0, 'Сообщение', 'Интернет доступен, возможно количество'&@CRLF&'символов близко к максимальному (350-376)') Else MsgBox(0, 'Сообщение', 'Отсутствует доступ к интернету') EndIf EndIf EndSwitch WEnd Func _SetCombo() Local $vTest = InetRead('http://translate.google.ru/?q=#ru|en|') If @error Then MsgBox(0, 'Сообщение', 'Возможно интернет отключен') $vTest = BinaryToString($vTest) ; $vTest=StringRegExp($vTest, '(—</option><option value="az.*?</select></div>)', 3) $vTest=StringRegExp($vTest, '(<option value=az.*?</select></div>)', 3) If UBound($vTest)<2 Then $vTest=$vTest[0] Else $vTest=$vTest[1] EndIf If StringInStr($vTest, 'value=en>БОЗМЙКУЛЙК<') Then $vTest= _Encoding_KOI8To1251($vTest) $vTest=StringRegExp($vTest, 'value=(.*?)>(.*?)</option>', 3) Local $lng = "" For $i = 0 To UBound($vTest)-1 Step 2 $lng &= $vTest[$i] & " - " & StringUpper(StringLeft($vTest[$i+1], 1)) & StringTrimLeft($vTest[$i+1], 1) & "|" Next $vTest = "" $lng=StringTrimRight($lng, 1) GUICtrlSetData($Lang_Combo1, 'auto - Определить язык|'&$lng, "en - Английский") GUICtrlSetData($Lang_Combo2, $lng, "ru - Русский") EndFunc ; Google Functions от Beege ; http://www.autoitscript.com/forum/topic/98504-google-functions/page__view__findpost__p__708636 Func _GoogleTranslate($sText, $sFrom = "en", $sTo = "ru") Local $sTranslation, $sUrl, $sSource $sUrl = StringFormat("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%s&langpair=%s%%7C%s", $sText, $sFrom, $sTo) $sSource = _INetGetSource($sUrl) $sTranslation = StringRegExp(BinaryToString($sSource, 4), '"translatedText":"([^"]+)"', 1) If @error Then Return '' $sTranslation[0]= _URLDecode($sTranslation[0]) Return $sTranslation[0] EndFunc ;==>_GoogleTranslate Func _GoogleTranslateString($sText, $sLangPair = -1, $bEncodeURL = False) If $sLangPair = -1 Then $sLangPair = "auto|en" If $bEncodeURL Then $sText = _Encoding_URLToHex($sText) $sResult = BinaryToString(InetRead('http://google.ru/translate_t?langpair=' & $sLangPair & '&text=' & $sText)) If StringRight($sLangPair, 2) = "ru" Or StringRight($sLangPair, 4) = "auto" Then $sResult = _Encoding_KOI8To1251($sResult) $aResult = StringRegExp($sResult, '(?si)(?:onmouseout=".*?>)(.*?)(?=</SPAN>)', 3) $sResult = '' For $i = 0 To UBound($aResult)-1 $sResult &= $aResult[$i] Next $sResult = StringReplace($sResult, '<br>', @CRLF) If _Encoding_IsUTF8Format($sResult) Then $sResult = _Encoding_UTF8ToANSI($sResult) If $bEncodeURL Then $sResult = _URLDecode($sResult) Return $sResult EndFunc ; #FUNCTION# ============================================== ; Description ...: Decodeds text for use in URLs ; Parameters ....: $sURL - IN - The text to decode ; Return values .: The decoded text ; Author ........: Stephen Podhajecki {gehossafats at netmdc. com} ; Remarks .......: Replaces escaped hex values for url encoding with ascII characters. ; Decoding based on information provided here: http://www.blooberry.com/indexdot/html/topics/urlencoding.htm ; Related .......: _URLEncode ; ========================================================= Func _URLDecode($sURL) Local $aEncodable[13] = ['"',"'","<",">","\","^","[","]","`","+","$",",","#"] ;decode non-printable and space Local $sTemp = $sURL For $x = 0 To 32 $sTemp = StringReplace($sTemp,"%"&Hex($x,2),Chr($x)) Next ;decode "unsafe" For $x = 0 To UBound($aEncodable)-1 $sTemp = StringReplace($sTemp,"%"&Hex(Asc($aEncodable[$x]),2),$aEncodable[$x]) Next ;decode upper ascii and {}|~_ For $x = 123 To 255 $sTemp = StringReplace($sTemp,"%"&Hex($x,2),Chr($x)) Next ;decode % last $sTemp = StringReplace($sTemp,"%25","%") $sTemp = _ConvertEntities($sTemp) Return $sTemp EndFunc ; #FUNCTION# ===================================================================================================================== ; Description ...: _ConvertEntities ; Parameters ....: $sURL - IN - The Text to convert ; Return values .: Success - Converted string ; Author ........: Stephen Podhajecki {gehossafats at netmdc. com} ; Remarks .......: Replaces HTML escape sequences with character representation ; Based on information found here: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php ; nbsp is changed to 32 instead of 160 ; Related .......: ; ================================================================================================================================ Func _ConvertEntities($sURL) Local $sTemp = $sUrl Local $aEntities[96][2]=[[""",34],["&",38],["<",60],[">",62],[" ",3],[" ",32] _ ,["¡",161],["¢",162],["£",163],["¤",164],["¥",165],["¦",166] _ ,["§",167],["¨",168],["©",169],["ª",170],["¬",172],["­",173] _ ,["®",174],["¯",175],["°",176],["±",177],["²",178],["³",179] _ ,["´",180],["µ",181],["¶",182],["·",183],["¸",184],["¹",185] _ ,["º",186],["»",187],["¼",188],["½",189],["¾",190],["¿",191] _ ,["À",192],["Á",193],["Ã",195],["Ä",196],["Å",197],["Æ",198] _ ,["Ç",199],["È",200],["É",201],["Ê",202],["Ì",204],["Í",205] _ ,["Î",206],["Ï",207],["Ð",208],["Ñ",209],["Ò",210],["Ó",211] _ ,["Ô",212],["Õ",213],["Ö",214],["×",215],["Ø",216],["Ù",217] _ ,["Ú",218],["Û",219],["Ü",220],["Ý",221],["Þ",222],["ß",223] _ ,["à",224],["á",225],["â",226],["ã",227],["ä",228],["å",229] _ ,["æ",230],["ç",231],["è",232],["é",233],["ê",234],["ë",235] _ ,["ì",236],["í",237],["î",238],["ï",239],["ð",240],["ñ",241] _ ,["ò",242],["ó",243],["ô",244],["õ",245],["ö",246],["÷",247] _ ,["ø",248],["ù",249],["ú",250],["û",251],["ü",252],["þ",254]] For $x = 0 To Ubound($aEntities)-1 $sTemp = StringReplace($sTemp,$aEntities[$x][0],Chr($aEntities[$x][1])) Next For $x = 32 To 255 $sTemp = StringReplace($sTemp,"&#"&$x&";",chr($x)) Next For $x = 256 To 10000 $sTemp = StringReplace($sTemp,"&#"&$x&";",chrw($x)) Next Return $sTemp EndFunc Func WM_SIZE($hWnd, $Msg, $wParam, $lParam) ; #forceref $Msg, $wParam Local $xClient, $yClient ; Координаты области клиенской части. $xClient = BitAND($lParam, 0x0000FFFF) $yClient = BitShift($lParam, 16) $w=$xClient-20 $h=($yClient-80)/2-25 GUICtrlSetPos($Edit1, 10, 80, $w, $h) GUICtrlSetPos($Edit2, 10, 80+$h+20, $w, $h) GUICtrlSetPos($L2, 10, $h+84) GUICtrlSetPos($nInv, $w-85, $h+80) GUICtrlSetPos($Test, $w-60, $h+80) ; GUICtrlSetPos($SelFunc, 164, $h+80) Return 'GUI_RUNDEFMSG' EndFunc ; Func WM_WINDOWPOSCHANGING($hWnd, $Msg, $wParam, $lParam) ; Local $sRect = DllStructCreate("Int[6]", $lparam) ; Local $WinSizeX = DllStructGetData($sRect, 1, 5), $WinSizeY = DllStructGetData($sRect, 1, 6) ; If DllStructGetData($sRect, 1, 5)<>0 And Not BitAnd(WinGetState($Gui), 16) Then ; $w=$WinSizeX-20 ; $h=($WinSizeY-80)/2-43 ; GUICtrlSetPos($Edit1, 10, 80, $w, $h) ; GUICtrlSetPos($Edit2, 10, 80+$h+20, $w, $h) ; GUICtrlSetPos($L2, 10, $h+84) ; GUICtrlSetPos($nInv, $w-100, $h+81) ; GUICtrlSetPos($Test, $w-70, $h+81) ; Return 'GUI_RUNDEFMSG' ; EndIf ; EndFunc Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam) #forceref $iMsg, $wParam If $hWnd = $GUI Then Local $tMINMAXINFO = DllStructCreate("int;int;" & _ "int MaxSizeX; int MaxSizeY;" & _ "int MaxPositionX;int MaxPositionY;" & _ "int MinTrackSizeX; int MinTrackSizeY;" & _ "int MaxTrackSizeX; int MaxTrackSizeY", _ $lParam) DllStructSetData($tMINMAXINFO, "MinTrackSizeX", 420) ; минимальные размеры окна DllStructSetData($tMINMAXINFO, "MinTrackSizeY", 420) EndIf EndFunc |