Search the Community
Showing results for tags 'uTorrent'.
-
Hi, I am trying to programatically use Autoit to migrate uTorrent files. I need to send the key Ctrl + D to uTorrent, and then fill in a dialogue box on the torrent location and the file location. However, I am stuck after opening uTorrent and trying to send the Ctrl D Command. This may not be the best but. Run("C:\Users\User\AppData\Roaming\uTorrent\uTorrent.exe") WinWaitActive("µTorrent 3.4.3 (build 40298) [32-bit]") ControlSend("µTorrent 3.4.3 (build 40298) [32-bit]", "", "", Send("^d")) That's the current code. I've tested this back with notepad to see if the code is working fine and it is, which make me struggle to understand why it wouldn't work for uTorrent. Could anybody help out please?
-
This is my latest project! I wanted to run utorrent as a service but still have status information without visiting the WebUI so I created µAuToBar which automatically displays uTorrent's status bars. they are almost exact duplicates of the download bar accessible via uTorrent's advanced context menu. There are plenty of reasons why you would want to check this out but instead of listing all of the current and planned features, I'll cut it short and just say theres support for proxies. If you use uTorrent then don't miss out on this gadget! uTorrent's WebUI must be enabled! I'd love feedback from my hardwork and will definitely add reasonable features but keep the topic strictly on uTorrent and not persay what one actually does with it. Some experimental features present in this version will become optional in later versions. #region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=Oxygen-Icons.org-Oxygen-Status-user-invisible.ico #AutoIt3Wrapper_Compile_Both=y #endregion ;**** Directives created by AutoIt3Wrapper_GUI **** ;http://www.iconarchive.com/show/oxygen-icons-by-oxygen-icons.org/Status-user-invisible-icon.html #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <ProgressConstants.au3> #include <GUIConstantsEx.au3> #include <EditConstants.au3> #include <UpdownConstants.au3> #include <Constants.au3> Global Const $uT_GUILimit = 10 Global $uT_oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1"), $uT_oERROR = ObjEvent("AutoIt.Error", "__uT_Error") Opt("GUIOnEventMode", 1) Global Const $uT_HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0, $uT_HTTPREQUEST_SETCREDENTIALS_FOR_PROXY = 1, _ $uT_HTTPREQUEST_PROXYSETTING_DEFAULT = 0, $uT_HTTPREQUEST_PROXYSETTING_PRECONFIG = 0, _ $uT_HTTPREQUEST_PROXYSETTING_DIRECT = 1, $uT_HTTPREQUEST_PROXYSETTING_PROXY = 2 Global $uT_Password = Default, $uT_Settings, $bValidSettings = False, $uT_Started = False, $uT_RM = Default Global $uT_LastBar = Default, $uT_CM = Default, $uT_Paused = False, $uT_PM = Default, $uT_DM = Default Global $uT_SID = "~", $uT_SIDc = StringLen($uT_SID), $uT_StatusColors = True, $uT_TrayState[10][3] Global $sINI = @ScriptDir & "\µAuToBar.ini" ; Tray Icon/Menu Configuration Opt("TrayOnEventMode", 1) Opt("TrayAutoPause", 0) Opt("TrayMenuMode", 15) Opt("TrayIconDebug", 0) TraySetToolTip("µAuToBar") ; Tray Icon Menu Creation TrayItemSetOnEvent(TrayCreateItem("Config"), "__uT_Configure") $uT_DM = TrayCreateMenu("Display") $uT_PM = TrayCreateItem("Pause") TrayItemSetOnEvent($uT_PM, "__uT_Suspend") $uT_EX = TrayCreateItem("Exit") TrayItemSetOnEvent($uT_EX, "__uT_Exit") __uT_Startup() ; Read settings from an INI file or prompt the user for server login information. Settings will be validated to an extent. Do Sleep(100) ; I've noticed on windows 7 that if there isn't some sort of sleep then the CPU usage will report extremely high during an empty loop's execution Until $bValidSettings ; Either $bValidSettings will become true VIA onevent functions or those functions will cause the program to exit If UBound($uT_Settings) = 16 Then ; Settings integrity check If $uT_Settings[5] Then ; If the utorrent password index of the settings array isn't blank then give the global variable $uT_Password its value $uT_Password = $uT_Settings[5] ElseIf $uT_Password = Default Or $uT_Password = "" Or $uT_Settings[4] = "" Then ; Ensure we have a password MsgBox(262144, "µAuToBar", "Invalid username/password configuration! µAuToBar will now close.", 10) FileDelete(@ScriptDir & "\µAuToBar.ini") ; Delete the configuration file to allow for reconfiguration Exit Else $uT_Settings[5] = $uT_Password ; Index #5 of the settings array may be blank if the user didn't choose to have their password stored. If $uT_Password isn't default then we'll use its value instead EndIf Else MsgBox(262144, "µAuToBar", "Invalid configuration! µAuToBar cannot continue.", 10) ; The integrity check failed. FileDelete(@ScriptDir & "\µAuToBar.ini") ; Delete the configuration file to allow for reconfiguration Exit EndIf $uT_Started = True ; Settings have been validated __uT_Auth($uT_Settings[4], $uT_Settings[5], $uT_Settings[2], $uT_Settings[3]) ; Set IP, Port, User, and Pass If Int($uT_Settings[13]) = $GUI_CHECKED Then ; If the Proxy setting is enabled then check for credentials If $uT_Settings[11] <> "" And $uT_Settings[12] <> "" Then ; If both proxy user and pass are not blank then set proxy with credentials __uT_SetProxy($uT_Settings[9], $uT_Settings[10], $uT_Settings[11], $uT_Settings[12]) Else ; Set proxy IP and Port without authentication __uT_SetProxy($uT_Settings[9], $uT_Settings[10]) EndIf EndIf Global $aTorrent = __uT_GetList(), $aLast = $aTorrent, $aTemp[1][1], $iDefaultSleep = 1000, $iDelay = 10000, $iUbound, $uT_BarUpdate = 0, $iBarCount = 0 Global $uT_Limit = 11 While 1 $iUbound = UBound($aTorrent, 2) If (UBound($aTorrent, 1) < 11) Or ($iUbound < 1) Then $aTorrent = $aTemp $iUbound = 1 $iSleep = $iDelay Else $iSleep = $iDefaultSleep EndIf For $i = 0 To UBound($aLast, 2) - 1 Step 1 For $n = 0 To $iUbound - 1 Step 1 If $aTorrent[0][$n] = $aLast[0][$i] Then ExitLoop If $n = $iUbound - 1 Then __uT_Bar($aLast[0][$i], False) EndIf Next Next $aLast = $aTorrent $bSleep = True __uT_StateList() For $i = 0 To $iUbound - 1 Step 1 If $i = 0 And UBound($aTorrent, 1) < 2 Then ExitLoop If $aTorrent[1][$i] And __uT_TrayStateMatch($i) Then $iBarCount = __uT_Bar($aTorrent[0][$i], $aTorrent[2][$i], Int($aTorrent[4][$i] / 10), __uT_GetSpeed($aTorrent[9][$i]), _ __uT_GetSpeed($aTorrent[8][$i]), __uT_GetETA($aTorrent[10][$i]), $aTorrent[21][$i]) If $iBarCount = 1 Then $uT_BarUpdate += 1 $bSleep = False EndIf If $uT_BarUpdate >= $uT_Limit - 1 Then ExitLoop Next $uT_BarUpdate = 0 If $bSleep Then $iSleep = $iDelay Sleep($iSleep) While $uT_Paused Sleep(100) WEnd $aTorrent = __uT_GetList() WEnd Func __uT_TrayStateMatch($iT) If Not UBound($aTorrent, 2) Or UBound($aTorrent, 1) < 22 Then Return SetError(1, 0, False) For $i = 0 To UBound($uT_TrayState, 1) - 1 Step 1 If $uT_TrayState[$i][0] = "" Then ContinueLoop If $uT_TrayState[$i][2] And $aTorrent[21][$iT] == $uT_TrayState[$i][0] Then Return True Next EndFunc Func __uT_StateList() Local $iUbound = UBound($aTorrent, 2) If Not $iUbound Or UBound($aTorrent, 1) < 22 Then Return SetError(1, 0, "") For $i = 0 To $iUbound - 1 Step 1 If Not __uT_TrayHasState($aTorrent[21][$i]) Then __uT_TrayCreateState($aTorrent[21][$i]) Next __uT_CheckStateList() EndFunc Func __uT_ToggleTrayState(ByRef $iState, $iTrayID) If Not IsDeclared("aLast") Or Not UBound($aLast) Then Return If $uT_TrayState[$iState][2] = True Then $uT_TrayState[$iState][2] = False TrayItemSetState($iTrayID, $TRAY_UNCHECKED) IniWrite($sINI, "µTrayState", $uT_TrayState[$iState][0], $TRAY_UNCHECKED) Else $uT_TrayState[$iState][2] = True TrayItemSetState($iTrayID, $TRAY_CHECKED) IniWrite($sINI, "µTrayState", $uT_TrayState[$iState][0], $TRAY_CHECKED) EndIf For $i = 0 To UBound($aLast, 2) - 1 Step 1 __uT_Bar($aLast[0][$i], False) Next EndFunc Func __uT_CheckStateList() Local $iUbound = UBound($aTorrent, 2), $bStateExist = False If Not $iUbound Or UBound($aTorrent, 1) < 22 Then Return SetError(1, 0, "") For $i = 0 To UBound($uT_TrayState, 1) - 1 Step 1 If $uT_TrayState[$i][0] = "" Then ExitLoop $bStateExist = False For $n = 0 To $iUbound - 1 Step 1 If $uT_TrayState[$i][0] == $aTorrent[21][$n] Then $bStateExist = True ExitLoop EndIf Next If Not $bStateExist Then __uT_TrayDeleteState($i) Next EndFunc Func __uT_TrayDeleteState($iState) TrayItemDelete($uT_TrayState[$iState][1]) $uT_TrayState[$iState][0] = "" Local $nIndex = 0, $aTemp[UBound($uT_TrayState, 1) - 1][3] For $n = 0 To UBound($uT_TrayState, 1) - 1 Step 1 If $uT_TrayState[$n][0] <> "" Then For $i = 0 To 2 Step 1 $aTemp[$nIndex][$i] = $uT_TrayState[$n][$i] Next $nIndex += 1 EndIf Next EndFunc Func __uT_TrayItemState() Local $iTrayID = @TRAY_ID For $i = 0 To UBound($uT_TrayState, 1) - 1 Step 1 If $uT_TrayState[$i][1] = $iTrayID Then __uT_ToggleTrayState($i, $iTrayID) ExitLoop EndIf Next EndFunc Func __uT_TrayCreateState($sState) If Not $sState Then Return Static Local $iState = 0, $iStateuBound = UBound($uT_TrayState, 1), $bRedim = False If $iState > $iStateuBound - 1 Then $bRedim = True Local $aTemp[$iStateuBound+10][3] EndIf $uT_TrayState[$iState][0] = $sState $uT_TrayState[$iState][1] = TrayCreateItem($sState, $uT_DM) TrayItemSetOnEvent($uT_TrayState[$iState][1], "__uT_TrayItemState") Local $nTrayState = Int(IniRead($sINI, "µTrayState", $sState, $TRAY_CHECKED)) TrayItemSetState($uT_TrayState[$iState][1], $nTrayState) $uT_TrayState[$iState][2] = ($nTrayState = $TRAY_CHECKED) If $bRedim Then For $i = 0 To $iState Step 1 For $p = 0 To 2 Step 1 $aTemp[$i][$p] = $uT_TrayState[$i][$p] Next Next $uT_TrayState = $aTemp EndIf $iState += 1 EndFunc Func __uT_TrayHasState($sState) For $n = 0 To UBound($uT_TrayState, 1) - 1 Step 1 If $sState == $uT_TrayState[$n][0] Then Return True Next Return False EndFunc Func __uT_GetETA($iSeconds) Static Local $iMin = 60, $iHour = $iMin * 60, $iDay = $iHour * 24 If $iSeconds >= $iDay Then Return Int($iSeconds / $iDay) & "d" If $iSeconds >= $iHour Then Return Int($iSeconds / $iHour) & "h" If $iSeconds >= $iMin Then Return Int($iSeconds / $iMin) & "m" Return $iSeconds & "s" EndFunc ;==>__uT_GetETA Func __uT_GetSpeed($iBytes) Static Local $iKB = 1024, $iMB = 1024 * 1024 If $iBytes >= $iMB Then Return Round($iBytes / $iMB, 1) & " MB/s" $iBytes = Round($iBytes / $iKB, 1) If Not $iBytes Then Return "0.0 KB/s" Return $iBytes & " KB/s" EndFunc ;==>__uT_GetSpeed Func __uT_GetStateColor($sState) Select Case StringInStr($sState, "Error", 2) Return "0xE63549" Case $sState == "Finished" Return "0x54A85F" Case $sState == "Seeding" Return "0xE9F76D" Case $sState == "[F] Seeding" Return "0xFCB25D" Case $sState == "Downloading metadata" Return "0x5D98FC" Case $sState == "[F] Downloading" Return "0x19D19A" Case $sState == "Downloading" Return "0x2BD119" EndSelect Return "0xE3E3E3" EndFunc Func __uT_Bar($sHash, $sName, $iPercent = 0, $iDownload = 0, $iUpload = 0, $iETA = "~", $sState = "", $iGuiX = Default, $iGuiY = Default) Local $iGuiWidth = 600, $iGuiHeight = 17, $aPos, $bDelete = False If IsBool($sName) Then $bDelete = True Local Enum $iLeft, $iTop, $iWidth, $iHeight Static Local $iBarOrder = 0 Local Enum $iHash, $hBar, $hLabel, $hProg, $hDown, $hUp, $hETA, $iLastY, $iOrder, $iColor Static Local $iGuiX_Default = Int(((@DesktopWidth / 2) - ($iGuiWidth / 2)) + 200) Static Local $iGuiY_Default = Int(((@DesktopHeight / 2) - ($iGuiHeight / 2)) + 200) If $iGuiX = Default Then $iGuiX = $iGuiX_Default If $iGuiY = Default Then $iGuiY = $iGuiY_Default Local $uT_GUI[15] = [$sHash, 0, 0, 0, 0, 0, 0, $iGuiY, $iBarOrder, "", $sName, $iPercent, $iDownload, $iUpload, $iETA], $aBar, $vColor = "0xE3E3E3" Static Local $uT_Bar[$uT_Limit], $uT_Count = 0 If $uT_Count Then For $i = 0 To $uT_Count Step 1 $aBar = $uT_Bar[$i] If Not UBound($aBar) Then ContinueLoop If $aBar[$iHash] = $sHash Then If $bDelete Then GUIDelete($aBar[$hBar]) $uT_Bar[$i] = "" Local $aTemp[$uT_Limit], $iTemp = 0 For $i = 0 To $uT_Count Step 1 $aBar = $uT_Bar[$i] If UBound($aBar) Then $aTemp[$iTemp] = $aBar $iTemp += 1 EndIf Next $uT_Count = Int($uT_Count - 1) $uT_Bar = $aTemp Return True EndIf If Not WinExists($aBar[$hBar]) Then Return __uT_Bar($aBar[$iHash], False) If $sName And $sName <> $aBar[10] Then GUICtrlSetData($aBar[$hLabel], $sName) If $uT_StatusColors And $sState Then Local $vColor = __uT_GetStateColor($sState) If $aBar[$iColor] <> $vColor Then GUISetBkColor($vColor, $aBar[$hBar]) EndIf If $aBar[11] <> $iPercent Then GUICtrlSetData($aBar[$hProg], $iPercent) If $aBar[12] <> $iDownload Then GUICtrlSetData($aBar[$hDown], $iDownload) If $aBar[13] <> $iUpload Then GUICtrlSetData($aBar[$hUp], $iUpload) If $aBar[14] <> $iETA Then GUICtrlSetData($aBar[$hETA], $iETA) Return 1 EndIf Next EndIf If IsBool($sName) Then Return If $uT_Count + 1 > $uT_Limit - 1 Then Return SetError(1, 0, "") $uT_Count += 1 If $uT_Count Then Local $iMinY = $iGuiY_Default - $iGuiHeight, $bClear Do $bClear = True For $i = 0 To $uT_Count Step 1 $aBar = $uT_Bar[$i] If UBound($aBar) Then If $aBar[$iLastY] = $iMinY Then $iMinY = $aBar[$iLastY] - $iGuiHeight $bClear = False EndIf EndIf Next Until $bClear $iGuiY = $iMinY $uT_GUI[$iLastY] = $iMinY EndIf $aPos = __uT_ControlPos($iGuiX, $iGuiY, $iGuiWidth - 2, $iGuiHeight - 2) $uT_GUI[$hBar] = GUICreate("", $aPos[$iWidth], $aPos[$iHeight], $aPos[$iLeft], $aPos[$iTop], BitOR($WS_POPUP, $WS_BORDER), BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)) If $uT_StatusColors And $sState Then $vColor = __uT_GetStateColor($sState) GUISetBkColor($vColor, $uT_GUI[$hBar]) $uT_GUI[$iColor] = $vColor If $vColor <> "0xE3E3E3" Then $vColor = "0x000000" Else $vColor = "0x696566" EndIf $aPos = __uT_ControlPos(0, 0, $aPos[$iWidth], $aPos[$iHeight]) GUICtrlCreateLabel("", $aPos[$iLeft], $aPos[$iTop], $aPos[$iWidth], $aPos[$iHeight], -1, BitOR($WS_EX_TRANSPARENT, $GUI_WS_EX_PARENTDRAG, $WS_EX_TOPMOST)) GUICtrlSetBkColor(-1, -2) $aPos = __uT_ControlPos(1, 1, 3, $aPos[$iHeight] - 2) GUICtrlCreateLabel("", $aPos[$iLeft], $aPos[$iTop], $aPos[$iWidth], $aPos[$iHeight], -1) GUICtrlSetBkColor(-1, $vColor) $aPos = __uT_ControlPos($aPos[$iLeft] + 4, $aPos[$iTop], $aPos[$iWidth], $aPos[$iHeight]) GUICtrlCreateLabel("", $aPos[$iLeft], $aPos[$iTop], $aPos[$iWidth], $aPos[$iHeight], -1) GUICtrlSetBkColor(-1, $vColor) $aPos = __uT_ControlPos($aPos[$iLeft] + $aPos[$iWidth] + 5, 0, ($iGuiWidth / 3) + 8, $aPos[$iHeight]) $uT_GUI[$hLabel] = GUICtrlCreateLabel($sName, $aPos[$iLeft], $aPos[$iTop], $aPos[$iWidth], $aPos[$iHeight]) GUICtrlSetFont(-1, 8.5, 400, 0, "Tahoma") GUICtrlSetColor(-1, 0x000000) $aPos = __uT_ControlPos($aPos[$iLeft] + $aPos[$iWidth], $aPos[$iTop] + 1, 100, $aPos[$iHeight]) $uT_GUI[$hProg] = GUICtrlCreateProgress($aPos[$iLeft], $aPos[$iTop], $aPos[$iWidth], $aPos[$iHeight], $PBS_SMOOTH) GUICtrlSetData($uT_GUI[$hProg], $iPercent) $aPos = __uT_ControlPos($aPos[$iLeft] + $aPos[$iWidth] + 9, $aPos[$iTop] - 1, 10, $aPos[$iHeight]) GUICtrlCreateLabel("D:", $aPos[$iLeft], $aPos[$iTop], $aPos[$iWidth], $aPos[$iHeight], -1) GUICtrlSetFont(-1, 8.5, 400, 0, "Tahoma") GUICtrlSetColor(-1, 0x000000) $aPos = __uT_ControlPos($aPos[$iLeft] + $aPos[$iWidth] + 6, $aPos[$iTop], 60, $aPos[$iHeight]) $uT_GUI[$hDown] = GUICtrlCreateLabel($iDownload, $aPos[$iLeft], $aPos[$iTop], $aPos[$iWidth], $aPos[$iHeight], $SS_LEFT) GUICtrlSetFont(-1, 8.5, 400, 0, "Tahoma") GUICtrlSetColor(-1, 0x000000) $aPos = __uT_ControlPos($aPos[$iLeft] + $aPos[$iWidth] + 6, $aPos[$iTop], 10, $aPos[$iHeight]) GUICtrlCreateLabel("U:", $aPos[$iLeft], $aPos[$iTop], $aPos[$iWidth], $aPos[$iHeight]) GUICtrlSetFont(-1, 8.5, 400, 0, "Tahoma") GUICtrlSetColor(-1, 0x000000) $aPos = __uT_ControlPos($aPos[$iLeft] + $aPos[$iWidth] + 6, $aPos[$iTop], 60, $aPos[$iHeight]) $uT_GUI[$hUp] = GUICtrlCreateLabel($iUpload, $aPos[$iLeft], $aPos[$iTop], $aPos[$iWidth], $aPos[$iHeight], $SS_LEFT) GUICtrlSetFont(-1, 8.5, 400, 0, "Tahoma") GUICtrlSetColor(-1, 0x000000) $aPos = __uT_ControlPos($aPos[$iLeft] + $aPos[$iWidth] + 6, $aPos[$iTop], 22, $aPos[$iHeight]) GUICtrlCreateLabel("ETA:", $aPos[$iLeft], $aPos[$iTop], $aPos[$iWidth], $aPos[$iHeight]) GUICtrlSetFont(-1, 8.5, 400, 0, "Tahoma") GUICtrlSetColor(-1, 0x000000) $aPos = __uT_ControlPos($aPos[$iLeft] + $aPos[$iWidth] + 6, $aPos[$iTop], 60, $aPos[$iHeight]) $uT_GUI[$hETA] = GUICtrlCreateLabel($iETA, $aPos[$iLeft], $aPos[$iTop], $aPos[$iWidth], $aPos[$iHeight], $SS_LEFT) GUICtrlSetFont(-1, 8.5, 400, 0, "Tahoma") GUICtrlSetColor(-1, 0x000000) GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "__uT_ContextMenu", $uT_GUI[$hBar]) GUISetState(@SW_SHOW, $uT_GUI[$hBar]) $uT_Bar[$uT_Count] = $uT_GUI $iBarOrder += 1 Return 1 EndFunc ;==>__uT_Bar Func __uT_ContextMenu($bPersist = True) If Not IsDeclared("bPersist") Then Assign("bPersist", True, 1) $uT_LastBar = @GUI_WinHandle If Not $bPersist Then If $uT_CM <> Default Then GUIDelete($uT_CM) $uT_CM = Default EndIf Return AdlibUnRegister("__uT_CMHandler") EndIf If $uT_CM <> Default Then Return Local $aPos = WinGetPos($uT_LastBar), $iWidth = 70, $iHeight = 15, $vMsg If Not UBound($aPos) Then Return Local $iX = (MouseGetPos(0) - ($iWidth / 2)) If $iX < $aPos[0] Then $iX = ($aPos[0] + 1) If ($iX + $iWidth) > ($aPos[0] + $aPos[2]) Then $iX = (($aPos[0] + $aPos[2]) - ($iWidth + 1)) $uT_CM = GUICreate("", $iWidth, $iHeight, $iX, $aPos[1] + 1, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)) GUICtrlCreateLabel("&Close", 0, 0, $iWidth, 12, $SS_CENTER) GUICtrlSetOnEvent(-1, "__uT_CloseBar") GUISetState(@SW_SHOW, $uT_CM) AdlibRegister("__uT_CMHandler", 250) EndFunc ;==>__uT_ContextMenu Func __uT_CMHandler() If Not WinActive($uT_CM) Then __uT_ContextMenu(False) EndFunc ;==>__uT_CMHandler Func __uT_CloseBar() GUIDelete($uT_LastBar) $uT_LastBar = Default __uT_ContextMenu(False) EndFunc ;==>__uT_CloseBar Func __uT_ControlPos($iLeft = 0, $iTop = 0, $iWidth = 0, $iHeight = 0) Local $aPos[4] = [$iLeft, $iTop, $iWidth, $iHeight] Return $aPos EndFunc ;==>__uT_ControlPos Func __uT_Auth($uT_User = Default, $uT_Pass = Default, $uT_IP = @IPAddress1, $uT_Port = 8080) Static Local $aInfo[4] If $uT_User <> Default And $uT_User And $uT_Pass <> Default And $uT_Pass Then $aInfo[0] = $uT_User $aInfo[1] = $uT_Pass $aInfo[2] = $uT_IP $aInfo[3] = $uT_Port ElseIf Not $aInfo[0] Or Not $aInfo[1] Then Return SetError(1, 0, "") EndIf Return $aInfo EndFunc ;==>__uT_Auth Func __uT_ActionRequest($sAction, $bGetToken = True) Local $sURL = $sAction If $bGetToken Then $sURL = __uT_Token() If @error Then Return SetError(@error, __uT_ServerState(@extended), -1) $sURL &= $sAction EndIf __uT_Open("GET", $sURL, False) If @error Then Return SetError(@error, __uT_ServerState(@extended), -3) __uT_SetProxy(True) If @error Then Return SetError(@error, __uT_ServerState(@extended), -2) __uT_SetCredentials() If @error Then Return SetError(@error, __uT_ServerState(@extended), -4) __uT_SetRequestHeader("Content-Type", "application/x-www-form-urlencoded") If @error Then Return SetError(@error, __uT_ServerState(@extended), -5) __uT_Send() If @error Then Return SetError(@error, __uT_ServerState(@extended), -6) Local $sResp = __uT_ResponseText() ConsoleWrite($sResp & @CRLF) If @error Then Return SetError(@error, __uT_ServerState(@extended), -7) Else Return SetError(0, 0, $sResp) EndIf EndFunc ;==>__uT_ActionRequest Func __uT_SetRequestHeader($sHeader, $sValue = "") If Not IsDeclared("uT_oHTTP") Then Return SetError(1, 0, "") If Not IsObj($uT_oHTTP) Then Return SetError(2, 0, "") $uT_oHTTP.SetRequestHeader($sHeader, $sValue) If @error Then Return SetError(3, @error, "") Else Return SetError(0, 0, True) EndIf EndFunc ;==>__uT_SetRequestHeader Func __uT_Open($sMethod, $sURL, $bAsync = False) If Not IsDeclared("uT_oHTTP") Then Return SetError(1, 0, "") If Not IsObj($uT_oHTTP) Then Return SetError(2, 0, "") $uT_oHTTP.Open($sMethod, $sURL, $bAsync) If @error Then Return SetError(3, @error, "") Else Return SetError(0, 0, True) EndIf EndFunc ;==>__uT_Open Func __uT_Send($vBody = "") If Not IsDeclared("uT_oHTTP") Then Return SetError(1, 0, "") If Not IsObj($uT_oHTTP) Then Return SetError(2, 0, "") $uT_oHTTP.Send($vBody) If @error Then Return SetError(3, @error, "") Else Return SetError(0, 0, True) EndIf EndFunc ;==>__uT_Send Func __uT_SetCredentials($nFlags = $uT_HTTPREQUEST_SETCREDENTIALS_FOR_SERVER) If Not IsDeclared("uT_oHTTP") Then Return SetError(1, 0, "") If Not IsObj($uT_oHTTP) Then Return SetError(2, 0, "") Local $uT_Auth = __uT_Auth() If @error Or UBound($uT_Auth, 1) <> 4 Then Return SetError(3, 0, "") $uT_oHTTP.SetCredentials($uT_Auth[0], $uT_Auth[1], $nFlags) If @error Then Return SetError(4, @error, "") Else Return SetError(0, 0, True) EndIf EndFunc ;==>__uT_SetCredentials Func __uT_CacheString(Const ByRef $sResp) Local $uT_CacheString = StringRegExp($sResp, '"torrentc":(?:.*?)(\d+)"\v', 3) If @error Then Return SetError(1, 0, "") Return $uT_CacheString[0] EndFunc ;==>__uT_CacheString Func __uT_ResponseText() If Not IsDeclared("uT_oHTTP") Then Return SetError(1, 0, "") If Not IsObj($uT_oHTTP) Then Return SetError(2, 0, "") Local $vReturn = $uT_oHTTP.ResponseText() If @error Then Return SetError(3, @error, "") Else Return SetError(0, 0, $vReturn) EndIf EndFunc ;==>__uT_ResponseText Func __uT_Error($oError) ConsoleWrite("!>ScriptLine: " & $oError.scriptline & @CRLF & "!>Description: " & $oError.description & @CRLF) EndFunc ;==>__uT_Error Func __uT_Token() Local $uT_Auth = __uT_Auth() If @error Or UBound($uT_Auth, 1) <> 4 Then Return SetError(1, 0, "") If Not $uT_Settings[1] Then $uT_Settings[1] = "http://" Local $sToken = __uT_ActionRequest($uT_Settings[1] & $uT_Auth[2] & ":" & $uT_Auth[3] & "/gui/token.html", False) If @error Then Return SetError(@error, @extended, "") Else $sToken = StringMid($sToken, 45, 64) If Not $sToken Then Return SetError(255, 0, "") Return $uT_Settings[1] & $uT_Auth[2] & ":" & $uT_Auth[3] & "/gui/?token=" & $sToken EndIf EndFunc ;==>__uT_Token Func __uT_ParseList($sResp, $sPrefixRE) $sResp = StringRegExpReplace(StringReplace($sResp, "\\", "\", 0, 2), '(\\"|\\,)', "") $sResp = StringReplace($sResp, " ", $uT_SID, 0, 2) ConsoleWrite($sResp & @CRLF) Local $aResp = StringRegExp(StringStripWS($sResp, 8), $sPrefixRE & "\[\[(.*?)\]\]", 3) If @error Then Return SetError(1, 0, "") Local $aTemp = $aResp $aResp = StringSplit($aResp[0], "],[", 3) If @error Then $aResp = $aTemp Local $aTorrent[1] For $i = 0 To UBound($aResp, 1) Step 1 $aTemp = StringRegExp($aResp[$i], '(?:\A[^,][a-zA-Z0-9]{40}[^,])[^"]\d+[^"](".*?")?', 3) If @error Then ContinueLoop $aResp[$i] = StringReplace(StringReplace($aResp[$i], $aTemp[0], StringReplace($aTemp[0], ",", "", 0, 2), 1, 2), '"', "", 0, 2) $aTemp = StringSplit($aResp[$i], ",", 3) If @error Or UBound($aTemp) < 1 Then ContinueLoop If $i = 0 Then ReDim $aTorrent[UBound($aTemp, 1)][UBound($aResp, 1)] For $n = 0 To UBound($aTemp, 1) - 1 Step 1 $aTorrent[$n][$i] = StringReplace($aTemp[$n], $uT_SID, " ", 0, 1) If UBound($aTorrent, 1) - 1 <= $n Then ExitLoop Next If UBound($aTorrent, 2) - 1 <= $i Then ExitLoop Next Return $aTorrent EndFunc ;==>__uT_ParseList Func __uT_SetProxy($sProxy = Default, $vPort = Default, $sUser = Default, $sPass = Default) If Not IsDeclared("uT_oHTTP") Then Return SetError(1, 0, "") If Not IsObj($uT_oHTTP) Then Return SetError(2, 0, "") Static Local $uT_Proxy, $uT_User, $uT_Pass If $sProxy <> Default And $vPort <> Default Then $uT_Proxy = $sProxy & ":" & String($vPort) ElseIf $uT_Proxy <> "" Then $uT_oHTTP.SetProxy($uT_HTTPREQUEST_PROXYSETTING_PROXY, $uT_Proxy) If @error Then Return SetError(3, @error, "") Else $uT_oHTTP.SetProxy($uT_HTTPREQUEST_PROXYSETTING_DEFAULT) If @error Then Return SetError(3, @error, "") EndIf If $sUser <> Default And $sPass <> Default Then $uT_User = $sUser $uT_User = $sPass If IsBool($sProxy) And $sProxy Then $uT_oHTTP.SetCredentials($uT_User, $uT_User, $uT_HTTPREQUEST_SETCREDENTIALS_FOR_PROXY) If @error Then Return SetError(4, @error, "") EndIf ElseIf $uT_User <> "" Then $uT_oHTTP.SetCredentials($uT_User, $uT_User, $uT_HTTPREQUEST_SETCREDENTIALS_FOR_PROXY) If @error Then Return SetError(4, @error, "") EndIf Return SetError(0, 0, True) EndFunc ;==>__uT_SetProxy Func __uT_ServerState($nError = Default) Static Local $uT_ServerState = 0 If $nError <> Default Then $uT_ServerState = $nError Return $uT_ServerState EndFunc ;==>__uT_ServerState ; #FUNCTION# ==================================================================================================================== ; Name ..........: __uT_GetList ; Description ...: Returns a list of torrent jobs and their properties. ; Syntax ........: __uT_GetList([$bReset = False]) ; Optional param is for internal use only! ; Parameters ....: $bReset - [optional] A boolean value. Default is False. ; Return values .: Success - 2 Dimensional array, where the colums represent the torrent jobs and rows are the properties. ; ; [0][0] = HASH (string), ; [1][0] = STATUS* (integer), ; [2][0] = NAME (string), ; [3][0] = SIZE (integer in bytes), ; [4][0] = PERCENT PROGRESS (integer in per mils 1000 = 100.0 complete), ; [5][0] = DOWNLOADED (integer in bytes), ; [6][0] = UPLOADED (integer in bytes), ; [7][0] = RATIO (integer in per mils), ; [8][0] = UPLOAD SPEED (integer in bytes per second), ; [9][0] = DOWNLOAD SPEED (integer in bytes per second), ; [10][0] = ETA (integer in seconds), ; [11][0] = LABEL (string), ; [12][0] = PEERS CONNECTED (integer), ; [13][0] = PEERS IN SWARM (integer), ; [14][0] = SEEDS CONNECTED (integer), ; [15][0] = SEEDS IN SWARM (integer), ; [16][0] = AVAILABILITY (integer in 1/65536ths), ; [17][0] = TORRENT QUEUE ORDER (integer), ; [18][0] = REMAINING (integer in bytes) ; ; [.....] ; ; Failure........: @error is nonzero ; Author ........: Decipher ; Remarks .......: Original UDF Credit - JohnOne/Supagusti, This function now should return 28 properties ; Related .......: __uT_ParseList, __uT_CacheString, __uT_GetProps, __uT_GetFiles, __uT_GetStats ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func __uT_GetList($bReset = False) Static Local $aTorrent, $uT_CacheString If $bReset Then $uT_CacheString = "" $aTorrent = "" EndIf Local $sResp = __uT_ActionRequest("&list=1&cid=" & $uT_CacheString) If @error Or Not $sResp Then Return SetError(1, 0, "") If $uT_CacheString Then Local $aTemp If @error Then Return SetError(2, 0, "") $aTemp = __uT_ParseList($sResp, 'torrentp[^\[]{' & (2 + $uT_SIDc) & '}') If Not @error Then Local $iUbound = UBound($aTemp, 1), $iLimit = 20, $aNew[$iUbound][$iLimit], $iNew = 0, $aNewTemp For $i = 0 To UBound($aTemp, 2) - 1 Step 1 For $n = 0 To UBound($aTorrent, 2) - 1 Step 1 If $aTorrent[0][$n] = $aTemp[0][$i] Then For $p = 1 To UBound($aTorrent, 1) - 1 Step 1 $aTorrent[$p][$n] = $aTemp[$p][$i] If UBound($aTemp, 1) - 1 <= $p Then ExitLoop Next ExitLoop ElseIf $n = (UBound($aTorrent, 2) - 1) Then ; Create an array contain torrent entries that haven't been cached. $iNew += 1 If $iNew > $iLimit Then $aNewTemp = $aNew $iLimit += 20 ReDim $aNew[$iUbound][$iLimit] For $new = 0 To UBound($aNewTemp, 2) - 1 Step 1 For $p = 0 To $iUbound - 1 Step 1 $aNew[$p][$new] = $aNewTemp[$p][$new] Next Next $aNewTemp = "" Else For $p = 0 To $iUbound - 1 $aNew[$p][$iNew - 1] = $aTemp[$p][$i] Next EndIf EndIf Next Next If $iNew <> 0 Then Local $iProps = UBound($aTorrent, 1), $iUbound = UBound($aTorrent, 2), $aNewArray[$iProps][$iUbound + $iNew] For $i = 0 To $iUbound - 1 Step 1 For $p = 0 To $iProps - 1 Step 1 $aNewArray[$p][$i] = $aTorrent[$p][$i] Next Next Local $n = 0 For $i = $i To ($iUbound + $iNew) - 1 Step 1 For $p = 0 To $iProps - 1 Step 1 $aNewArray[$p][$i] = $aNew[$p][$n] Next $n += 1 Next $aNew = "" $aTorrent = $aNewArray EndIf $aTemp = "" EndIf $aTemp = StringRegExp(StringStripWS($sResp, 8), '"torrentm":.{' & $uT_SIDc & '}\[(.*?)\]', 3) If Not @error And UBound($aTemp) And $aTemp[0] Then $aTemp = StringSplit(StringReplace($aTemp[0], '"', "", 0, 2), ",", 3) If UBound($aTemp) Then Local $avArray[UBound($aTorrent, 1)][UBound($aTorrent, 2) - UBound($aTemp, 1)], $bSkip, $d = 0 For $i = 0 To UBound($aTorrent, 2) - 1 Step 1 $bSkip = False For $n = 0 To UBound($aTemp, 1) - 1 Step 1 If $aTorrent[0][$i] = $aTemp[$n] Then $bSkip = True ExitLoop EndIf Next If Not $bSkip Then For $p = 0 To UBound($aTorrent, 1) - 1 Step 1 $avArray[$p][$d] = $aTorrent[$p][$i] Next If $d >= UBound($avArray, 2) - 1 Then ExitLoop $d += 1 EndIf Next $aTorrent = $avArray EndIf EndIf Else $aTorrent = __uT_ParseList($sResp, 'torrents[^\[]{' & (2 + $uT_SIDc) & '}') If @error Then Return SetError(5, 0, "") EndIf $uT_CacheString = __uT_CacheString($sResp) If @error Then Return SetError(6, 0, "") Return $aTorrent EndFunc ;==>__uT_GetList ; GUI function for getting user's configuration information Func __uT_LoginGUI($uT_Value) ; Define Intial Coords Local $iWidth = 380, $iHeight = 170, $iLeft = 10, $iTop = 10, $iSpace = 8, $iEnd = 0 ; Control & Value Variable Index Enumeration Local $uT_Control[16] Local Enum $hGUI, $hScheme, $hIP, $hPort, $hUser, $hPass, $hStart, $hRem, $hProScheme, $hProIP, $hProPort, $hProUser, $hProPass, $hProState, _ $hValidate, $hCancel ; Intial GUI Creation $uT_Control[$hGUI] = GUICreate(" µAuToBar v1.0", $iWidth, $iHeight, -1, -1, -1, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)) ; Logo GUICtrlCreateLabel("Decipher Systems", $iWidth - 195, 8, 150, 15, $SS_LEFT) GUICtrlSetColor(-1, 0x000000) GUICtrlSetFont(-1, 8.5, 400, 6, "Verdana") GUICtrlCreateTab($iLeft, $iTop, $iWidth - 23, $iHeight - 40, -1, -1) ; Tab -1 GUICtrlCreateTabItem("WebUI") GUICtrlCreateLabel("Server Address:", _Coord($iLeft, $iSpace + 12), _Coord($iTop, 45), _Coord($iWidth, 75), _Coord($iHeight, 15), $SS_RIGHT) GUICtrlSetColor(-1, 0x000000) $uT_Control[$hScheme] = GUICtrlCreateCombo($uT_Value[$hScheme], _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop, $iTop - 3), _Coord($iWidth, 65), _Coord($iHeight)) Local $sData = "https://" If $uT_Value[$hScheme] = $sData Then $sData = "http://" GUICtrlSetData(-1, $sData) $uT_Control[$hIP] = GUICtrlCreateInput($uT_Value[$hIP], _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop, $iTop + 1), _Coord($iWidth, 93), _Coord($iHeight, $iHeight + 3)) GUICtrlCreateLabel("Port:", _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop, $iTop + 2), _Coord($iWidth, 21), _Coord($iHeight, $iHeight - 3), $SS_LEFT) GUICtrlSetColor(-1, 0x000000) $uT_Control[$hPort] = GUICtrlCreateInput($uT_Value[$hPort], _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop, $iTop - 2), _Coord($iWidth, 50), _Coord($iHeight, $iHeight + 3), $ES_NUMBER) GUICtrlCreateUpdown(-1, BitOR($UDS_ARROWKEYS, $UDS_NOTHOUSANDS)) _Coord($iEnd, $iLeft + $iWidth) ; New Row GUICtrlCreateLabel("Username:", _Coord($iLeft, $iSpace + 12), _Coord($iTop, 43 + $iHeight + $iSpace), _Coord($iWidth, 51), _Coord($iHeight, 15), $SS_RIGHT) GUICtrlSetColor(-1, 0x000000) $uT_Control[$hUser] = GUICtrlCreateInput($uT_Value[$hUser], _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop, $iTop - 1), _Coord($iWidth, $iEnd - $iLeft), _Coord($iHeight, $iHeight + 2)) ; New Row GUICtrlCreateLabel("Password:", _Coord($iLeft, $iSpace + 12), _Coord($iTop, $iTop + $iHeight + $iSpace), _Coord($iWidth, 51), _Coord($iHeight, 15), $SS_RIGHT) GUICtrlSetColor(-1, 0x000000) $uT_Control[$hPass] = GUICtrlCreateInput($uT_Value[$hPass], _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop, $iTop - 1), _Coord($iWidth, $iEnd - $iLeft), _Coord($iHeight, $iHeight + 2), $ES_PASSWORD) ; New Row $uT_Control[$hStart] = GUICtrlCreateCheckbox("Start after validation", _Coord($iLeft, $iSpace + 12), _Coord($iTop, $iTop + $iHeight + $iSpace), _Coord($iWidth, 115), _Coord($iHeight, 17), $SS_LEFT) GUICtrlSetState(-1, $uT_Value[$hStart]) GUICtrlSetFont(-1, 8.5, 400, -1, "Tahoma") $uT_Control[$hRem] = GUICtrlCreateCheckbox("Remember Password(s) - UNSAFE", _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop), _Coord($iWidth, 180), _Coord($iHeight)) GUICtrlSetState(-1, $uT_Value[$hRem]) GUICtrlSetFont(-1, 8.5, 400, -1, "Tahoma") ; Tab -2 GUICtrlCreateTabItem("Proxy") GUICtrlCreateLabel("Server Address:", _Coord($iLeft, $iSpace + 12), _Coord($iTop, 45), _Coord($iWidth, 75), _Coord($iHeight, 15), $SS_RIGHT) GUICtrlSetColor(-1, 0x000000) $uT_Control[$hProScheme] = GUICtrlCreateCombo($uT_Value[$hProScheme], _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop, $iTop - 3), _Coord($iWidth, 65), _Coord($iHeight)) $sData = "https://" If $uT_Value[$hProScheme] = $sData Then $sData = "http://" GUICtrlSetData(-1, $sData) $uT_Control[$hProIP] = GUICtrlCreateInput($uT_Value[$hProIP], _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop, $iTop + 1), _Coord($iWidth, 93), _Coord($iHeight, $iHeight + 3)) GUICtrlCreateLabel("Port:", _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop, $iTop + 2), +_Coord($iWidth, 21), _Coord($iHeight, $iHeight - 3), $SS_LEFT) GUICtrlSetColor(-1, 0x000000) $uT_Control[$hProPort] = GUICtrlCreateInput($uT_Value[$hProPort], _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop, $iTop - 2), _Coord($iWidth, 50), _Coord($iHeight, $iHeight + 3), $ES_NUMBER) GUICtrlCreateUpdown(-1, BitOR($UDS_ARROWKEYS, $UDS_NOTHOUSANDS)) _Coord($iEnd, $iLeft + $iWidth) ; New Row GUICtrlCreateLabel("Username:", _Coord($iLeft, $iSpace + 12), _Coord($iTop, 43 + $iHeight + $iSpace), _Coord($iWidth, 51), _Coord($iHeight, 15), $SS_RIGHT) GUICtrlSetColor(-1, 0x000000) $uT_Control[$hProUser] = GUICtrlCreateInput($uT_Value[$hProUser], _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop, $iTop - 1), _Coord($iWidth, $iEnd - $iLeft), _Coord($iHeight, $iHeight + 2)) ; New Row GUICtrlCreateLabel("Password:", _Coord($iLeft, $iSpace + 12), _Coord($iTop, $iTop + $iHeight + $iSpace), _Coord($iWidth, 51), _Coord($iHeight, 15), $SS_RIGHT) GUICtrlSetColor(-1, 0x000000) $uT_Control[$hProPass] = GUICtrlCreateInput($uT_Value[$hProPass], _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop, $iTop - 1), _Coord($iWidth, $iEnd - $iLeft), _Coord($iHeight, $iHeight + 2), $ES_PASSWORD) ; New Row GUICtrlCreateLabel("*Use blank credentials to connect without auth.", _Coord($iLeft, $iSpace + 12), _Coord($iTop, $iTop + $iHeight + $iSpace), _Coord($iWidth, 245), _Coord($iHeight, 15), $SS_LEFT) GUICtrlSetColor(-1, 0x000000) GUICtrlSetFont(-1, 8.5, 400, 2, "Tahoma") $uT_Control[$hProState] = GUICtrlCreateCheckbox("Use Proxy", _Coord($iLeft, $iLeft + $iWidth + $iSpace), _Coord($iTop), _Coord($iWidth, 65), _Coord($iHeight, $iHeight + 2)) GUICtrlSetState(-1, $uT_Value[$hProState]) ; Tab Termination GUICtrlCreateTabItem("") ; Outside of tab controls $uT_Control[$hValidate] = GUICtrlCreateButton("&Validate", 215 - $iSpace, 151 - $iSpace, 75, 20) GUICtrlSetOnEvent(-1, "__uT_Validate") $uT_Control[$hCancel] = GUICtrlCreateButton("&Cancel", 290, 151 - $iSpace, 75, 20) GUICtrlSetOnEvent(-1, "__uT_Abort") ; Register GUI close special event handler GUISetOnEvent($GUI_EVENT_CLOSE, "__uT_Abort") ; Return a one dimensional array of controls Return $uT_Control EndFunc ;==>__uT_LoginGUI ; Helper Function - Helps the programmer and makes the GUI creation sorta dynamic if updating positions. Without wasted space! Func _Coord(ByRef $iCoord, $iNewCoord = Default) If $iNewCoord <> Default Then $iCoord = $iNewCoord Return $iCoord EndFunc ;==>_Coord Func __uT_Manage($sAction) ; Define settings file and array variables Static Local $uT_Control Switch ($sAction) Case "Configure" TrayItemSetState($uT_PM, $TRAY_CHECKED) TrayItemSetState($uT_PM, $TRAY_DISABLE) $uT_Paused = True Local $aTemp ; Check for settings, Create default values array if neccessary, array bounds check, read stored settings to array if available If FileExists($sINI) Then $aTemp = IniReadSection($sINI, "µSettings") If @error Or UBound($aTemp, 1) <> 17 Then Local $uT_Value[16] = [15, "http://", @IPAddress1, 8080, "", "", $GUI_CHECKED, $GUI_UNCHECKED, "http://", "127.0.0.1", 8118, "", "", $GUI_UNCHECKED] Else Local $uT_Value[16] $uT_Value[0] = 15 For $i = 1 To $aTemp[0][0] Step 1 If IsInt($aTemp[$i][1]) Then $aTemp[$i][1] = Int($aTemp[$i][1]) $uT_Value[$i - 1] = $aTemp[$i][1] Next EndIf ; Pass stored or default settings array to the gui creation function, returns gui controls array $uT_Control = __uT_LoginGUI($uT_Value) ; Show the Login Interface GUISetState(@SW_SHOW, $uT_Control[0]) Case "Save" $uT_Paused = False TrayItemSetState($uT_PM, $TRAY_UNCHECKED) TrayItemSetState($uT_PM, $TRAY_ENABLE) If $uT_RM <> Default Then TrayItemDelete($uT_RM) $uT_RM = Default ; create the array for compliance with Autoit's IniWriteSection function Local $uT_Value[16][2], $vData = "Undefined" ; Read all the settings from the control array For $i = 0 To 15 Step 1 ; Weed out unneccessary function calls If $i > 0 And $i < 14 Then $vData = GUICtrlRead($uT_Control[$i]) If $i = 7 And $vData = $GUI_UNCHECKED Then If $uT_Value[5][1] Then $uT_Password = $uT_Value[5][1] $uT_Value[5][1] = "" EndIf $uT_Value[$i][0] = "µOpt-" & $i $uT_Value[$i][1] = $vData $vData = "Undefined" Next ; Destroy the GUI GUIDelete($uT_Control[0]) ; Save configuration IniWriteSection($sINI, "µSettings", $uT_Value, 0) If $uT_Started Then TrayTip("µAuToBar", "Restarting...", 5, 1) Run(@ScriptFullPath) Sleep(5000) Exit (0) EndIf Case "Startup" If Not FileExists($sINI) Then Return False Local $aTemp = IniReadSection($sINI, "µSettings") If @error Or UBound($aTemp, 1) <> 17 Then Return SetError(1, 0, "") For $i = 2 To 6 Step 1 If Not $aTemp[$i][1] Then If $i = 6 And $uT_Password <> Default Then ExitLoop Return False EndIf Next If Int($aTemp[8][1]) <> $GUI_CHECKED Then Return False If Int($aTemp[14][1]) = $GUI_CHECKED Then For $i = 9 To 11 Step 1 If Not $aTemp[$i][1] Then Return SetError(2, 0, "") Next EndIf Local $aSettings[16] For $i = 1 To 16 Step 1 $aSettings[$i - 1] = $aTemp[$i][1] Next Return $aSettings Case "Validate" $uT_Paused = False TrayItemSetState($uT_PM, $TRAY_UNCHECKED) TrayItemSetState($uT_PM, $TRAY_ENABLE) If $uT_RM <> Default Then TrayItemDelete($uT_RM) $uT_RM = Default ; create the array for compliance with Autoit's IniWriteSection function Local $uT_Value[16][2], $vData = "Undefined" ; Read all the settings from the control array For $i = 0 To 15 Step 1 ; Weed out unneccessary function calls If $i > 0 And $i < 14 Then $vData = GUICtrlRead($uT_Control[$i]) $uT_Value[$i][0] = "µOpt-" & $i $uT_Value[$i][1] = $vData $vData = "Undefined" Next For $i = 1 To 5 Step 1 If Not $uT_Value[$i][1] And $i <> 6 Then Return SetError(4, 0, "") Next If $uT_Value[7][1] = $GUI_UNCHECKED Then $uT_Password = $uT_Value[5][1] $uT_Value[5][1] = "" Else $uT_Password = Default EndIf If Int($uT_Value[13][1]) = $GUI_CHECKED Then For $i = 8 To 10 Step 1 If Not $uT_Value[$i][1] Then Return SetError(2, 0, "") Next EndIf Local $aSettings[16] For $i = 0 To 15 Step 1 $aSettings[$i] = $uT_Value[$i][1] Next Return $aSettings Case "Quit" GUIDelete($uT_Control[0]) Exit EndSwitch EndFunc ;==>__uT_Manage Func __uT_Configure() __uT_Manage("Configure") EndFunc ;==>__uT_Configure Func __uT_Startup() $uT_Settings = __uT_Manage("Startup") If @error = 2 Then MsgBox(262144, "µAuToBar", "There appears to be an error with the current proxy configuration!") If Not UBound($uT_Settings) Then __uT_Manage("Configure") Else $bValidSettings = True EndIf EndFunc ;==>__uT_Startup Func __uT_Validate() $uT_Settings = __uT_Manage("Validate") If @error = 2 Then MsgBox(262144, "µAuToBar", "There appears to be an error with the current proxy configuration!") ElseIf @error = 4 Then MsgBox(262144, "µAuToBar", "The current µTorrent server information failed validation! Please the check WebUI tab.") ElseIf UBound($uT_Settings) Then __uT_Manage("Save") ; Connection Failure Check should be done here! $bValidSettings = True If $uT_Settings[6] <> $GUI_CHECKED Then Exit Else MsgBox(262144, "µAuToBar", "The current µTorrent server information failed validation! An Unknown error occurred!") EndIf EndFunc ;==>__uT_Validate Func __uT_Abort() MsgBox(262144, "µAuToBar", "User canceled configuration changes. µAuToBar will now close.", 15) __uT_Manage("Quit") EndFunc ;==>__uT_Abort Func __uT_Exit() Exit (0) EndFunc ;==>__uT_Exit Func __uT_Suspend() If $uT_Paused Then $uT_Paused = False TrayItemSetState($uT_PM, $TRAY_UNCHECKED) TrayItemSetState($uT_PM, $TRAY_ENABLE) TrayItemDelete($uT_RM) $uT_RM = Default Else $uT_Paused = True TrayItemSetState($uT_PM, $TRAY_CHECKED) TrayItemSetState($uT_PM, $TRAY_DISABLE) If $uT_RM = Default Then TrayItemDelete($uT_EX) $uT_RM = TrayCreateItem("Resume") TrayItemSetOnEvent($uT_RM, "__uT_Suspend") $uT_EX = TrayCreateItem("Exit") TrayItemSetOnEvent($uT_EX, "__uT_Exit") EndIf EndIf EndFunc ;==>__uT_Suspend -- Script: µAuToBar.au3 +14 Binary: µAuToBar.zip Icon: Oxygen-Icons.org-Oxygen-Status-user-invisible.ico Don't Forget To Seed!!!!
-
Heres some code to look at. #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.9.4 (beta) Author: Decipher Script Function: WinGet - Windows Program Downloader/Installer #ce ---------------------------------------------------------------------------- HttpSetUserAgent("Wget/1.13.4") ;- "portableapps.com/updater/update.ini" #include <String.au3> #include <Array.au3> #include <Date.au3> #include <File.au3> #include <IncludesWinHTTP.au3> #include <WinAPIEx.au3> Global $sTemp_Dir = _TempFile() DirCreate($sTemp_Dir) HotKeySet("{ESC}", "_Exit") ;/DESTINATION="" /AUTOCLOSE=true /HIDEINSTALLER=true /SILENT=true _Setup_uTorrent() ;"http://downloads.sourceforge.net/portableapps" Func _Setup_uTorrent() Local $uTorrent_Portable_Installer = _Download_uTorrent_Portable('http://sourceforge.net/projects/portableapps/files/uTorrent Portable') If $uTorrent_Portable_Installer Then If Not @error Then _Configure_uTorrent_Portable($uTorrent_Portable_Installer) If Not @error Then FileChangeDir(@ScriptDir) _Configure_uTorrent_WebUI() FileChangeDir($sTemp_Dir & "uTorrentPortable") Run("uTorrentPortable.exe /HIDE") ShellExecute("http://admin:test@127.0.0.1:8080/gui") ; Testing Else ConsoleWrite(@CRLF & "!> Error configuring uTorrent Portable! Code: " & @error & @CRLF) _Exit() EndIf EndIf While 1 Sleep(1000) WEnd EndFunc ;==>_Setup_uTorrent Func _Download_uTorrent_Portable($uTorrent_Portable_SourceForge_URL, $iIteration = False) Local $sPage_Data = _WinHttpGet($uTorrent_Portable_SourceForge_URL) If $sPage_Data = '' Or @error Then ConsoleWrite(@CRLF & '!> Connection Error or Invalid URL!' & @CRLF) Return SetError(1, 0, 0) EndIf Local $aDate, $iLatest_Index = 0, $iLast_Calc = Default, $aFileList = _StringBetween($sPage_Data, '<tr title="', '</tr>') ; 2012-08-01 For $iFile = 0 To UBound($aFileList, 1) - 1 $aDate = _StringBetween($aFileList[$iFile], '<abbr title="', '"') If Not IsArray($aDate) Then ContinueLoop If $aDate[0] = '' Then ContinueLoop $aDate = StringSplit($aDate[0], ' ', 3) $aDate[0] = StringReplace($aDate[0], '-', '/') Local $iDateCalc = _DateDiff('s', $aDate[0] & ' ' & $aDate[1], _NowCalc()) If $iLast_Calc = Default Then $iLast_Calc = $iDateCalc If $iDateCalc <= $iLast_Calc Then $iLatest_Index = $iFile $iLast_Calc = $iDateCalc Next Local $aFile_Name = _StringBetween($aFileList[$iLatest_Index], 'class="' & 'name' & '">', '</a>') If $iIteration Then FileChangeDir($sTemp_Dir) Local $sFile_Name = StringStripWS($aFile_Name[0], 7) If _WinHttpGet($uTorrent_Portable_SourceForge_URL & '/' & $sFile_Name, True) Then Return $sFile_Name Else Return False EndIf Else Local $sFile_Name = _Download_uTorrent_Portable($uTorrent_Portable_SourceForge_URL & '/' & StringStripWS($aFile_Name[0], 7), True) If $sFile_Name Then Return $sFile_Name Else Return False EndIf EndIf EndFunc ;==>_Download_uTorrent_Portable Func _Configure_uTorrent_Portable($sFile_Name) Run($sFile_Name) Local $sUTP_Title_Def = "[CLASS:#32770; TITLE:uTorrent Portable]" If Not WinWait($sUTP_Title_Def, "", 30) Then Return SetError(1, 0, 0) $hUTP = WinGetHandle($sUTP_Title_Def) If @error Then Return SetError(2, 0, 0) WinActivate($hUTP, "") If Not WinWaitActive($hUTP, "", 5) Then Return SetError(3, 0, 0) $sUTP_Text = WinGetText($hUTP, "") If StringInStr($sUTP_Text, "Please select a language for the installer.") Then If Not WinActive($hUTP) Then WinActivate($hUTP, "") If Not WinWaitActive($hUTP, "", 5) Then Return SetError(4, 0, 0) ControlCommand($hUTP, "", "[CLASS:ComboBox; INSTANCE:1]", "SelectString", "English") If @error Then Return SetError(5, 0, 0) If Not ControlClick($hUTP, "", "[CLASS:Button; INSTANCE:1]") Then Return SetError(6, 0, 0) EndIf $sUTP_Title_Def = "[CLASS:#32770; INSTANCE:1; TITLE:uTorrent Portable | PortableApps.com Installer]" If Not WinWait($sUTP_Title_Def, "", 10) Then Return SetError(7, 0, 0) $hUTP = WinGetHandle($sUTP_Title_Def) For $i = 1 To 100 ; 10 seconds If WinGetTitle($hUTP, "") <> "uTorrent Portable | PortableApps.com Installer" Then Sleep(500) If $i = 100 Then Return SetError(8, 0, 0) ContinueLoop EndIf ExitLoop Next WinActivate($hUTP, "") If Not WinWaitActive($hUTP, "", 5) Then Return SetError(9, 0, 0) If Not ControlClick($hUTP, "", "[CLASS:Button; INSTANCE:2]") Then Return SetError(10, 0, 0) For $i = 1 To 100 $sText = ControlGetText($hUTP, "", "Button2") If $sText <> "I &Agree" Then Sleep(100) If $i = 100 Then Return SetError(11, 0, 0) ContinueLoop EndIf ExitLoop Next If Not WinActive($hUTP) Then WinActivate($hUTP, "") If Not WinWaitActive($hUTP, "", 5) Then Return SetError(12, 0, 0) If Not ControlClick($hUTP, "", "[CLASS:Button; INSTANCE:2]") Then Return SetError(13, 0, 0) For $i = 1 To 100 $sText = ControlGetText($hUTP, "", "Button2") If $sText <> "&Install" Then Sleep(100) If $i = 100 Then Return SetError(14, 0, 0) ContinueLoop EndIf ExitLoop Next If Not WinActive($hUTP) Then WinActivate($hUTP, "") If Not WinWaitActive($hUTP, "", 5) Then Return SetError(15, 0, 0) If Not ControlClick($hUTP, "", "[CLASS:Button; INSTANCE:2]") Then Return SetError(16, 0, 0) For $i = 1 To 1200 ; 2 min $sText = ControlGetText($hUTP, "", "Button2") If $sText <> "&Finish" Then Sleep(100) If $i = 1200 Then Return SetError(17, 0, 0) ContinueLoop EndIf ExitLoop Next If Not WinActive($hUTP) Then WinActivate($hUTP, "") If Not WinWaitActive($hUTP, "", 5) Then Return SetError(18, 0, 0) If Not ControlClick($hUTP, "", "[CLASS:Button; INSTANCE:2]") Then Return SetError(19, 0, 0) EndFunc ;==>_Configure_uTorrent_Portable Func _Configure_uTorrent_WebUI() FileInstall("Extsettings.dat", $sTemp_Dir & "uTorrentPortableAppuTorrentsettings.dat") FileInstall("ExtWebUI.zip", $sTemp_Dir & "uTorrentPortableAppuTorrentWebUI.zip") EndFunc ;==>_Configure_uTorrent_WebUI Func _WinHttpGet($sDownload_URI, $iFileMode = False, $sReferer = Default, $sFile_Name = Default) Local $aSplit_URL = _WinHttpCrackUrl($sDownload_URI) Local $hOptTime = TimerInit() Local $hWinHttpOpen = _WinHttpOpen() Local $hWinHttpConnect = _WinHttpConnect($hWinHttpOpen, $aSplit_URL[2]) Local $hWinHttpRequest = _WinHttpOpenRequest($hWinHttpConnect, "GET", $aSplit_URL[6], Default, $sReferer) _WinHttpSendRequest($hWinHttpRequest) _WinHttpReceiveResponse($hWinHttpRequest) Local $iSizeBytes = _WinHttpQueryHeaders($hWinHttpRequest, $WINHTTP_QUERY_CONTENT_LENGTH) If _WinHttpQueryDataAvailable($hWinHttpRequest) Then Local $vNTdll = DllOpen("ntdll.dll") Local $nSpeedLimit = 1024 * 5000 ; 1024 * Kilobytes per second Local $iBytePerStep = 8192 Local $iBufferSize = 1024 * 1024 Local $iSleepTime = Round($iBytePerStep / $nSpeedLimit * 1000) Local $tPrecSleep = DllStructCreate("int64 time;") Local $pPrecSleep = DllStructGetPtr($tPrecSleep) If $iFileMode Then If $sFile_Name = Default Then $sFile_Name = @WorkingDir & "" & StringTrimLeft($aSplit_URL[6], StringInStr($aSplit_URL[6], "/", 0, -1)) Local $hFile = _WinAPI_CreateFileEx($sFile_Name, $CREATE_NEW, $GENERIC_WRITE, $FILE_SHARE_READ, $FILE_ATTRIBUTE_NORMAL) EndIf Local $tBuffer = DllStructCreate("byte[" & $iBufferSize & "]") Local $pBuffer = DllStructGetPtr($tBuffer) Local $tOverlapped = _GetStruct_Overlapped(0) Local $pOverlapped = DllStructGetPtr($tOverlapped) Local $iByteWritten = 0 Local $iOffsetFile = 0 If $iFileMode Then Local $vData = Binary("") Else Local $vData = "" EndIf Local $nT = TimerInit() Local $iError, $iBufferContent, $iByteWritten Do $iSleepTemp = ($iSleepTime - TimerDiff($nT)) If $iSleepTemp > 0 Then DllStructSetData($tPrecSleep, "time", -10000 * $iSleepTemp) DllCall($vNTdll, "dword", "ZwDelayExecution", "int", 0, "ptr", $pPrecSleep) EndIf $nT = TimerInit() ; Reset Timer If $iFileMode Then $vData &= _WinHttpReadData($hWinHttpRequest, 2, $iBytePerStep) ; Get Chunk Else $vData &= _WinHttpReadData($hWinHttpRequest) EndIf $iError = @error If $iFileMode Then $iBufferContent = BinaryLen($vData) If $iBufferContent >= $iBufferSize - $iBytePerStep Or $iError = -1 Then _WinAPI_GetOverlappedResult($hFile, $pOverlapped, $iByteWritten, True) DllStructSetData($tBuffer, 1, $vData) $vData = Binary("") $iOffsetFile += $iByteWritten $tOverlapped = _GetStruct_Overlapped($iOffsetFile) $pOverlapped = DllStructGetPtr($tOverlapped) _WinAPI_WriteFile($hFile, $pBuffer, $iBufferContent, $iByteWritten, $pOverlapped) EndIf EndIf Until $iError = -1 If $iFileMode Then _WinAPI_CloseHandle($hFile) DllClose($vNTdll) _WinHttpCloseHandle($hWinHttpRequest) _WinHttpCloseHandle($hWinHttpConnect) _WinHttpCloseHandle($hWinHttpOpen) ConsoleWrite(@CRLF & "> Downloaded " & $aSplit_URL[2] & $aSplit_URL[6] & " in " & Round(TimerDiff($hOptTime) / 1000, 2) & _ " second(s)" & " at " & _ByteSuffix($iSizeBytes / Int(TimerDiff($hOptTime)) * 1000, -1) & "/s" & @CRLF) If Not $iFileMode Then Return $vData Else If FileExists($sFile_Name) Then Return $sFile_Name Else Return False EndIf EndIf Else Return SetError(1, 0, 0) EndIf EndFunc ;==>_WinHttpGet Func _GetStruct_Overlapped($iOffset, $hEvent = 0) Local $tOffset = DllStructCreate('int64') Local $tOffsetSplit = DllStructCreate('dword;dword', DllStructGetPtr($tOffset)) DllStructSetData($tOffset, 1, $iOffset) $tStruct = DllStructCreate($tagOVERLAPPED) DllStructSetData($tStruct, "Internal", 0) DllStructSetData($tStruct, "InternalHigh", 0) DllStructSetData($tStruct, "Offset", DllStructGetData($tOffsetSplit, 1)) DllStructSetData($tStruct, "OffsetHigh", DllStructGetData($tOffsetSplit, 2)) DllStructSetData($tStruct, "hEvent", $hEvent) Return $tStruct EndFunc ;==>_GetStruct_Overlapped Func _ByteSuffix($iBytes, $iRound = 2) ; UnKnown Author Local $A, $aArray[9] = [" B", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB"] While $iBytes > 1023 $A += 1 $iBytes /= 1024 WEnd Return Round($iBytes, $iRound) & $aArray[$A] EndFunc ;==>_ByteSuffix Func _Exit() DirRemove($sTemp_Dir, 1) Exit EndFunc ;==>_Exit ;Opt("WinTitleMatchMode", 3) ;~ Global $7z = "7za.exe" ;~ Global $7z_Extract_Cmd = ' e ', $7z_OutputDir_Cmd = ' -o' ;~ Func _7z_Extract($sFile_Name) ;~ If Not FileExists($7z) Then FileInstall("7za.exe", $7z) ;~ Return RunWait(@ComSpec & ' /k ' & $7z & $7z_Extract_Cmd & $sFile_Name & '-o"' & $sTemp_Dir & 'uTorrentPortable_3.2.0.27636_online.paf' & '"') ;~ EndFunc I would like to be able to install uTorrent Portable silently. I know how I should be able to do this. See here but I can't. I can use 7-Zip to extract the contents but not with the standalone 7za.exe I think if enough people become interested that we can hack it anyway. So any ideas?