|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты |
|
[архив - Часть 2] AutoIt скрипты
|
(*.*) Сообщения: 36565 |
Внимание! Тема переведена в архивное состояние Текущая тема http://forum.oszone.net/thread-98914.html (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. ![]() Сайт программы Русская справка Коллекция AutoIt скриптов от Sanja Alone Коллекция AutoIt скриптов от MSFN (могут быть устаревшие). Справочник по командам rundll32 (команды запуска диалоговых окон и не только...) AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо). Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров. Цитата Vadikan:
|
||
------- Отправлено: 00:02, 05-02-2006 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать gregaz
Цитата:
также и с папками... Но учти, в версии 3.2.2.0 и ранее, есть баг - если пытаться переименовать файл в то же имя но с разным регистром, файл удаляется, к примеру вот так: Файл C:\test.txt будет удалён. Я дал знать разработчикам об этом баге, и в версиях выше чем 3.2.2.0 они вроде это поправили. Цитата:
![]() amel27 Цитата:
Func _InetGetSpeed($Sleep=1000) Local $BytesCheckBefore = @InetGetBytesRead Sleep($Sleep) Local $BytesCheckAfter = @InetGetBytesRead Local $RetSpeedByBytes = $BytesCheckAfter - $BytesCheckBefore If $RetSpeedByBytes < 0 Then $RetSpeedByBytes = 0 Return $RetSpeedByBytes EndFunc Цитата:
![]() |
||||
------- Отправлено: 19:36, 11-06-2007 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
If Not(InetGet("http://downloadmirror.intel.com/6667/eng/ISM556_Build7.exe", "xpSP2_ru.exe", 1, 1)) Then MsgBox (16,'','') $begin = TimerInit() While @InetGetActive Sleep(250) $AverageSpeed = (@InetGetBytesRead / TimerDiff($begin)) TrayTip("Downloading", "Average Speed = " & Int($AverageSpeed) & " Kbyte/sec", 10, 16) Wend Цитата:
Global $InetSpeed = 0, $InetGetBytesRead = 0, $InetTimeStamp = 0 AdlibEnable ("_InetGetSpeed", 1000) InetGet("http://downloadmirror.intel.com/6667/eng/ISM556_Build7.exe", "test.exe", 1, 1) While @InetGetActive Sleep(250) TrayTip("Downloading", "Speed = " & Int($InetSpeed) & " Kbyte/sec", 10, 16) Wend Func _InetGetSpeed() If @InetGetActive Then If @InetGetBytesRead <> -1 Then Local $ticks = TimerDiff($InetTimeStamp) If $ticks>0 Then $InetSpeed = (@InetGetBytesRead-$InetGetBytesRead) / $ticks EndIf $InetGetBytesRead = @InetGetBytesRead $InetTimeStamp = TimerInit() Else $InetGetBytesRead = 0 $InetSpeed = 0 EndIf EndFunc |
||
Последний раз редактировалось amel27, 13-06-2007 в 03:11. Отправлено: 09:38, 12-06-2007 | #12 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата:
Хотя это можно совмещать... но почему бы не поместить функцию в цикл, и передавать ей как параметр чтение байтов, и возвращать с неё данные о скорости? это мне кажется лучший вариант... Global $InetSpeed = 0, $InetGetBytesRead = 0, $InetTimeStamp = 0, $begin = TimerInit() InetGet("http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3.2.4.4-setup.exe", "test.exe", 1, 1) While @InetGetActive Sleep(200) $Bytes = @InetGetBytesRead $InetSpeed = _InetGetSpeed($Bytes) $AverageSpeed = $Bytes*1000 / TimerDiff($begin) TrayTip("Downloading", "Speed = " & Round($InetSpeed/1024, 1), 10, 16) Wend MsgBox(0, "", "Avarage speed is: " & Round($AverageSpeed/1024, 1)) Func _InetGetSpeed($Bytes) If @InetGetActive Then If $InetTimeStamp Then Local $Ticks = TimerDiff($InetTimeStamp) If $Ticks > 0 Then $InetSpeed = ($Bytes-$InetGetBytesRead)*1000 / $Ticks EndIf $InetGetBytesRead = $Bytes $InetTimeStamp = TimerInit() Else $InetTimeStamp = 0 $InetGetBytesRead = 0 $InetSpeed = 0 EndIf Return $InetSpeed EndFunc Спасибо за примеры, вроде всё работает как надо ![]() P.S А среднюю скорость мне нужно не в цикле отображать, а подсчитать её для конечного вывода (чтобы показать юзеру с какой скоростью (средней) закаивался файл за весь промежуток закачки). Diamond По теме словарей (Dictionary): http://www.autoitscript.com/forum/in...6entry352256 |
|
------- Отправлено: 03:02, 13-06-2007 | #13 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
З.Ы. скрипт привел к работоспособному виду. |
|
Отправлено: 03:24, 13-06-2007 | #14 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата:
P.S А по поводу средней скорости.... на выходе из цикла переменная $AverageSpeed будет содержать общую среднюю скорость закачки на промежуток времени всей закачки, или она будет содержать последнюю засеченную среднюю скорость (на выходе из цикла)? |
|
------- Отправлено: 04:51, 13-06-2007 | #15 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
![]() Цитата:
Цитата:
Global $AdLibMS=500, $InetBytesBack = 10 Global $InetSpeed = 0, $InetTimeStamp Global $InetBytesRead[$InetBytesBack+1] AdlibEnable ("_InetGetSpeed", $AdLibMS) InetGet("http://downloadmirror.intel.com/6667/eng/ISM556_Build7.exe", "test.exe", 1, 1) While @InetGetActive Sleep(100) $bytes = StringFormat('Downloads: %d Kb',@InetGetBytesRead/1000) $speed = StringFormat('Speed: %d Kb/Sec',$InetSpeed) TrayTip('', $bytes & @CRLF & $speed, 10, 16) Wend Func _InetGetSpeed() Local $nb ; Значение массива по текущему индексу до его обновления (цикл назад) If @InetGetActive Then ; Если первый раз, то инициализируем массив If $InetBytesRead[0]=0 Then $InetBytesRead[0] = 1 ; Ищем следущую ячейку массива $InetBytesRead[0]+=1 If $InetBytesRead[0] > $InetBytesBack Then $InetBytesRead[0]=1 ; Сохраняем значение массива в переменной (сколько было байт 1 цикл назад) $nb = $InetBytesRead[$InetBytesRead[0]] ; Записываем новое значение загруженных байт $InetBytesRead[$InetBytesRead[0]] = @InetGetBytesRead ; Выбираем формулу в зависимости от того проходим первый цикл или уже нет If $nb >0 Then $InetSpeed = ($InetBytesRead[$InetBytesRead[0]]-$nb)/($AdLibMS * $InetBytesBack) Else $InetSpeed = $InetBytesRead[$InetBytesRead[0]]/($AdLibMS * $InetBytesRead[0]) EndIf Else ; Если нет закачки затираем массив и сбрасываем параметры If $InetBytesRead[0]>0 Then Global $InetBytesRead[$InetBytesBack+1] $InetSpeed = 0 EndIf EndFunc |
|||
Последний раз редактировалось amel27, 13-06-2007 в 12:39. Отправлено: 12:18, 13-06-2007 | #16 |
![]() Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Написал скрипты установки MathCAD 2001 и AutoCAD 2006 Mechanical.
В MathCAD 2001 после установки при первом запуске программы производится какая-то настройка. При этом необходимо не вынимать установочный диск. Грубо говоря, тыкаешь ярлык к mathcad.exe и запускается прогресс бар msi-настройщика длящийся около минуты. У ярлыка не указаны никакие ключи командной строки (точнее поле объект в свойствах ярлыка вообще неактивно и недоступно для просмотра). Поэтому простой запуск Run (@Programfilesdir & 'Mathsoft\Mathcad 2001 professional\mathcad.exe') Processwait('процесс') ProcessWaitClose('процесс') ProcessClose ('mathcad.exe') не помогает! При этом первой строчкой запускается сам Маткад и никакой настройки не производится. Настройка происходит только при запуске через ярлык. Как узнать что именно при этом происходит? В AutoCAD 2006 Mechanical после установки при первом запуске запускается процесс регистрации. Только строчка Run (@Programfilesdir & '...\...\Acad.exe') тоже не помогает. При отработке этой строчки из скрипта, выскакивает диалоговое окно сообщающее о том, что система не может найти како-то .dll. Если же сразу после этого запустить AutoCAD вручную - то все нормально! Помогите! |
Отправлено: 14:34, 13-06-2007 | #17 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Внедрённый HTML объект
Анимированный gif, звук (в бесконечном цикле!), плюс эффект с текстом. З.Ы. Пытался с помощью дополнительных стилей убрать рамку у объекта , но нашёл лишь несколько новых рамок... и всё же есть одна небольшая хитрость: В коде есть четыре закомментированных параметра, если их задействовать - то рамка исчезнет. $sound=@ScriptDir & "\MUSIC9.MID" $image=@ScriptDir & "\butterfly.gif" Opt("GUIOnEventMode",1) #include <GUIConstants.au3> $hGUI=GUICreate("Embedded Web control Test", 442, 300) GUISetOnEvent($GUI_EVENT_CLOSE,"Quit") $oIE = ObjCreate("Shell.Explorer.2") $GUIActiveX = GUICtrlCreateObj($oIE, 1, 1, 440, 62) $oIE.navigate ("about:blank") While $oIE.busy Sleep(200) WEnd $oIE.document.write('<bgsound loop="-1" src="' & $sound & '">') $oIE.document.write('<marquee behavior="alternate" direction="right"><font size="+3" color="#ff00ff"><b>Web control Test</b></font></marquee>') $oIE.refresh ;~ $oIE.height=66 ;~ $oIE.width=444 ;~ $oIE.left=-4 ;~ $oIE.top=-4 $oIE.document.body.scroll = "no" $oIE.document.body.bgcolor = "buttonface" $oIE.document.body.leftmargin = "2" $oIE.document.body.rightmargin = "2" $oIE.document.body.topmargin= "10" $oIE.document.body.background = $image GUICtrlSetStyle($GUIActiveX,-1,0x1999) GUICtrlSetState($GUIActiveX,$GUI_DISABLE) GUISetState(@SW_SHOW) While 1 Sleep(1000) WEnd Func Quit() Exit EndFunc Цитата:
![]() В любом случае, большое спасибо! ![]() |
|
Последний раз редактировалось Diamond, 19-06-2007 в 20:38. Причина: добавил в коде кое что... Отправлено: 18:33, 13-06-2007 | #18 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата:
Цитата:
Вот как я сделал: Global $InetBytesRead[10+1] InetGet("http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3.2.4.4-setup.exe", "test.exe", 1, 1) $begin = TimerInit() While @InetGetActive Sleep(100) $InetSpeed = _InetGetSpeed(100) $bytes = StringFormat('Downloads: %d Kb',@InetGetBytesRead/1024) $speed = StringFormat('Speed: %d Kb/Sec',$InetSpeed) TrayTip('', $bytes & @CRLF & $speed, 10, 16) Wend MsgBox (64,'', "Download is finished with Avarage Speed of: " & Int(FileGetSize("test.exe")/TimerDiff($begin)) & " kb/s") Func _InetGetSpeed($AdLibMS=500) Local $nb ; Значение массива по текущему индексу до его обновления (цикл назад) Local $InetSpeed = 0, $InetBytesBack = 10 If @InetGetActive Then ; Если первый раз, то инициализируем массив If $InetBytesRead[0]=0 Then $InetBytesRead[0] = 1 ; Ищем следущую ячейку массива $InetBytesRead[0]+=1 If $InetBytesRead[0] > $InetBytesBack Then $InetBytesRead[0]=1 ; Сохраняем значение массива в переменной (сколько было байт 1 цикл назад) $nb = $InetBytesRead[$InetBytesRead[0]] ; Записываем новое значение загруженных байт $InetBytesRead[$InetBytesRead[0]] = @InetGetBytesRead ; Выбираем формулу в зависимости от того проходим первый цикл или уже нет If $nb >0 Then $InetSpeed = ($InetBytesRead[$InetBytesRead[0]]-$nb)/($AdLibMS * $InetBytesBack) Else $InetSpeed = $InetBytesRead[$InetBytesRead[0]]/($AdLibMS * $InetBytesRead[0]) EndIf Else ; Если нет закачки затираем массив и сбрасываем параметры If $InetBytesRead[0]>0 Then Global $InetBytesRead[$InetBytesBack+1] $InetSpeed = 0 EndIf Return $InetSpeed EndFunc ![]() Кстати, у тебя в примере чтобы получить кб, байты деляться на 1000: Разве не на 1024 нужно делить? |
||
------- Отправлено: 22:20, 13-06-2007 | #19 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Цитата:
![]() AdLib хорош тем, что он не зависит от скрипта (есть соединение или нет) и временной интервал всегда одинаков. В твоем варианте интервал между "временнЫми засечками" на самом деле >100 ровно на столько, сколько потребуется скрипту на выполнение команд после Sleep(100). Обычно это неcущественно, но в общем случае он может быть любым (особенно если где-нибудь есть еще один Sleep() ![]() Global $InetBytesRead InetGet("http://downloadmirror.intel.com/6667/eng/ISM556_Build7.exe", "test.exe", 1, 1) _GetProgressSpeed ($InetBytesRead, @InetGetBytesRead, 100) While @InetGetActive Sleep(100) $bytes = StringFormat('Downloads: %d Kb',@InetGetBytesRead/1024) $speed = StringFormat('Speed: %d Kb/Sec',_GetProgressSpeed ($InetBytesRead, @InetGetBytesRead) *0.9765625) TrayTip('', $bytes & @CRLF & $speed, 10, 16) Wend Func _GetProgressSpeed (ByRef $arrValueBack, $intValue = -1, $intCountBack = 0) Local $nb, $nt, $bound = UBound($arrValueBack,1) If $intCountBack<=0 Then $intCountBack = $bound-1 ; Восстанавливаем актуальное значение глубины отката ; Блок инициализации массива и контроля ошибок If $intCountBack<=0 Then Return SetError(1, 0, -1) ; Ошибка размерности 1 If $intValue<0 Then Dim $arrValueBack [$intCountBack+1][2] = [[1,TimerInit()]] Return 0 ElseIf $intCountBack<>$bound-1 Then Dim $arrValueBack [$intCountBack+1][2] = [[1,TimerInit()],[$intValue,TimerInit()]] Return 0 Else If UBound($arrValueBack,2)<2 Then Return SetError(2, 0, -1) ; Ошибка размерности 2 If ($arrValueBack[0][0]<=0) Or ($arrValueBack[0][0]>$intCountBack) Then Return SetError(3, 0, -1) ; Ошибка целостности EndIf ; Ищем следующую ячейку массива $arrValueBack[0][0]+=1 If $arrValueBack[0][0] > $intCountBack Then $arrValueBack[0][0]=1 ; Сохраняем значения массива в переменных (цикл назад) $nb = $arrValueBack[$arrValueBack[0][0]][0] $tb = $arrValueBack[$arrValueBack[0][0]][1] ; Записываем новые значения загруженных байт и время $arrValueBack[$arrValueBack[0][0]][0] = $intValue $arrValueBack[$arrValueBack[0][0]][1] = TimerInit() ; Выбираем формулу в зависимости от того проходим первый цикл или нет If $nb =0 Then Return $arrValueBack[$arrValueBack[0][0]][0] / TimerDiff($arrValueBack[0][1]) Return ($arrValueBack[$arrValueBack[0][0]][0]-$nb) / TimerDiff($tb) EndFunc Цитата:
![]() ...кстати, множитель 0.9765625 как раз отвечает за перевод исходной величины Byte/ms в KByte/sec |
|||
Последний раз редактировалось amel27, 15-06-2007 в 06:02. Отправлено: 10:55, 14-06-2007 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? | DreDo | Хочу все знать | 4 | 01-12-2009 18:54 | |
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. | Vadikan | AutoIt | 1543 | 18-01-2009 10:46 | |
[Архив - Часть 1.3] AutoIt скрипты | biork | AutoIt | 503 | 09-06-2007 11:27 | |
[Архив - Часть 1.2] AutoIt скрипты | Dirk Diggler | AutoIt | 505 | 02-12-2006 11:00 | |
[Архив - Часть 1.1] AutoIt скрипты | EgOrus | AutoIt | 335 | 04-02-2006 16:58 |
|