; TODO: ; +Add more languages ; +Add about link in tray ; -Add icon ; +Fix button positions ; -releasear!! :) ; Some config stuff NodeName = www.google.com version = Spinga Translator v0.1b by Leandro Ardissone GoogleLanguages = Arabic to English|Chinese (Simplified) to English|English to Arabic|English to Chinese (Simplified)|English to French|English to German|English to Italian|English to Japanese|English to Korean|English to Portuguese|English to Russian|English to Spanish||French to English|French to German|German to English|German to French|Italian to English|Japanese to English|Korean to English|Portuguese to English|Russian to English|Spanish to English ISOIndex = ar|en~zh-CN|en_~en|ar~en|zh-CN~en|fr~en|de~en|it~en|ja~en|ko~en|pt~en|ru~en|es~fr|en~fr|de~de|en~de|fr~it|en~ja|en~ko|en~pt|en~ru|en~es|en StringSplit, ISOI, ISOIndex , ~ Gosub, TrayMenu OpenTrans: Gui, Destroy Gui, Add, Edit, x6 y20 w640 h150 vOrig Gui, Add, Edit, x6 y190 w640 h150 vDest Gui, Add, DropDownList, x36 y350 w150 h250 vLangs AltSubmit, %GoogleLanguages% Gui, Add, Button, x546 y350 w100 h30 gTranslate, Translate Gui, Add, Button, x406 y350 w130 h30 gCopy, Copy to Clipboard GuiControl, Disable, Copy Gui, Add, Text, x8 y5 w100 h15 , Original Text: Gui, Add, Text, x8 y175 w100 h15 , Translated Text: Gui, Add, Text, x8 y353 w28 h20 , From: ; Generated using SmartGUI Creator 4.0 Gui, Show, x218 y229 h388 w656, %version% Return Translate: Gui, Submit, NoHide LangPair := ISOI%Langs% IPs := HostToIp(NodeName) if IPs <> -1 { GuiControl, Disable, Translate texto := Orig url = http://translate.google.com/translate_t?hl=en&ie=UTF8&langpair=%LangPair%&text=%texto% UrlDownloadToFile, %url%, spinga.txt FileRead, Contents, spinga.txt if not ErrorLevel { busquedaStart = id=result_box dir=ltr> busquedaEnd = FoundPos := RegExMatch(Contents, busquedaStart . "(.*)" . busquedaEnd, Result) GuiControl, Enable, Translate GuiControl, Enable, Copy GuiControl, , Dest, %Result1% } } else { MsgBox, You need to be connected to the internet to translate text } Return Copy: clipboard = %Result1% Return TrayMenu: Menu, Tray, MainWindow Menu, Tray, NoStandard Menu, Tray, Add, Open Translator, OpenTrans Menu, Tray, Add, Google Translate Website, LaunchGoogle Menu, Tray, Add, Leech Website, LaunchAbout Menu, Tray, Add Menu, Tray, Add, Exit, CloseMe Menu, Tray, Default, Open Translator Return LaunchAbout: Run, http://www.dr-leech.com.ar/ return LaunchGoogle: Run, http://translate.google.com/translate_t return Hide: WinHide, %version% Return GuiClose: Gosub, Hide Return CloseMe: ExitApp ; Internet connection testing function by Tasman IPs := HostToIp(NodeName) DllCall("Ws2_32\WSACleanup") ; always inlude this line after calling to release the socket connection HostToIp(NodeName) ; returns -1 if unsuccessfull or a newline seperated list of valid IP addresses { VarSetCapacity(wsaData, 32) ; The struct is only about 14 in size, so 32 is conservative. result := DllCall("Ws2_32\WSAStartup", "UShort", 0x0002, "UInt", &wsaData) ; Request Winsock 2.0 (0x0002) if ErrorLevel ; check ErrorLevel to see if the OS has Winsock 2.0 available: { MsgBox WSAStartup() could not be called due to error %ErrorLevel%. Winsock 2.0 or higher is required. return -1 } if result ; Non-zero, which means it failed (most Winsock functions return 0 on success). { MsgBox % "WSAStartup() indicated Winsock error " . DllCall("Ws2_32\WSAGetLastError") ; % return -1 } PtrHostent := DllCall("Ws2_32\gethostbyname", str, Nodename) if (PtrHostent = 0) Return -1 VarSetCapacity(hostent,16,0) DllCall("RtlMoveMemory",UInt,&hostent,UInt,PtrHostent,UInt,16) h_addr_list := ExtractInteger(hostent,12,false,4) VarSetCapacity(AddressList,12,0) DllCall("RtlMoveMemory",UInt,&AddressList,UInt,h_addr_list,UInt,12) Loop, 3 { offset := ((A_Index-1)*4) PtrAddress%A_Index% := ExtractInteger(AddressList,offset,false,4) If (PtrAddress%A_Index% =0) break VarSetCapacity(address%A_Index%,4,0) DllCall("RtlMoveMemory" ,UInt,&address%A_Index%,UInt,PtrAddress%A_Index%,Uint,4) i := A_Index Loop, 4 { if Straddress%i% Straddress%i% := Straddress%i% "." ExtractInteger(address%i%,(A_Index-1 ),false,1) else Straddress%i% := ExtractInteger(address%i%,(A_Index-1 ),false,1) } Straddress0 = %i% } loop, %Straddress0% ; put them together and return them { _this := Straddress%A_Index% if _this <> IPs = %IPs%%_this% if A_Index = %Straddress0% break IPs = %IPs%`n } return IPs } ExtractInteger(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4) { Loop %pSize% result += *(&pSource+pOffset+A_Index-1) << 8*A_Index-8 Return result }