|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты |
|
[архив - Часть 2] AutoIt скрипты
|
(*.*) Сообщения: 36548 |
Профиль | Сайт | Отправить PM | Цитировать
Внимание! Тема переведена в архивное состояние Текущая тема 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() ), соответственно показания скорости будут неверными. Для сохранения точности придется в дополнение к @InetGetBytesRead сохранять показания TimerInit(), хотя интервал замера уже перестанет быть фиксированным... Кроме того инициализацию массива придется возложить на основной скрипт, так как функция не знает старая это закачка или новая. 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 |
|