Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты

Ответить
Настройки темы
[Архив - Часть 1.2] AutoIt скрипты

Ветеран


Сообщения: 565
Благодарности: 41

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 25-01-2008
Внимание!
Тема переведена в архивное состояние





(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.
Можно ли с помощью AutoIt выбрать каталог? Хочу нацарапать оболочку, которая мне будет конфиги для nnBackup писать, дык выбрать каталог для бэкапа пока только вручную получается... Нельзя ли как-нть вывалить стандартный диалог по выбору файлов-папок, и получить из него результат действий пользователей?

-------
Tega AutoPatcher. Все обновления для XP в одном пакете. http://tega.ru/dirk/links.html


Отправлено: 10:47, 10-02-2006

 

Пользователь


Сообщения: 73
Благодарности: 2

Профиль | Отправить PM | Цитировать


Спасибо за ответ, но если можно немного по прозрачнее

опишу мою ситуацию. у меня системные файлы патчатся ресурсами в стиле висты на этапе RunOnceEx, так вот, я хотел бы поменять командный файл, на автоит скрипт. вот команды командного файла
Код: Выделить весь код
 ...
 %WINDIR%\System32\fontext.dll TMP\fontext.dll
ZAP.exe %WINDIR%\System32\fontext.dll
RESHacker.exe -script "res\fontext\fontext.txt"
copy Out\fontext.dll %WINDIR%\System32\fontext.dll

copy "%ProgramFiles%\Internet Explorer\IEXPLORE.EXE" TMP\IEXPLORE.EXE
ZAP.exe "%ProgramFiles%\Internet Explorer\IEXPLORE.EXE"
RESHacker.exe -script "res\iexplore\iexplore.txt"
copy Out\iexplore.exe "%ProgramFiles%\Internet Explorer\IEXPLORE.EXE"
...
как мне тут лучше сделать? как я понимаю должен обрабатываться цикл в который будут передоваться поочередно описаные в скрипте имена файлов, но как это сделать я не знаю


и еще один вопрос. есть ли в автоит какое либо подобие xcopy? чтобы копировались только новые файлы, если есть, то скажите куда смотреть

заранее спасибо

Отправлено: 06:23, 18-10-2006 | #411



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 53
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем привет!
Может кто поможет.
Есть такая необходтмость устанавливать софт с диска на компы(ежедневно около 20-30 компов).Основной комплект прог для большинства компов одинаков,но достаточно часто возникает нужда поставить стандартный комплект прог с небольшими изменениями (вместо одних прог поставить другие,например вместо windvd power dvd).
Написал в AutoIt примитивный скрипт типа:

Код: Выделить весь код
run ("Multemedia\Burn disk\Nero\Nero6608a.exe")
WinWaitActive("Nero Burning ROM Помощник установки", "Nero Burning ROM")
ControlCommand("Nero Burning ROM Помощник установки", "Nero Burning ROM", "Button2", "Check", "")
WinWaitActive("Nero Burning ROM Помощник установки", "Я принимаю все пункты")
ControlCommand("Nero Burning ROM Помощник установки", "", "Button8", "Check", "")
ControlCommand("Nero Burning ROM Помощник установки", "", "Button2", "Check", "")
ControlSetText("Nero Burning ROM Помощник установки", "", "Edit1", "User")
ControlSetText("Nero Burning ROM Помощник установки", "", "Static13", "C:\Program files\ahead")
ControlSetText("Nero Burning ROM Помощник установки", "", "Edit3", "XXXX-XXXX-XXXX-XXXX-XXXX-XXXX")
ControlCommand("Nero Burning ROM Помощник установки", "", "Button2", "Check", "")
WinWaitActive("Nero Burning ROM Помощник установки", "Завершить")
ControlCommand("Nero Burning ROM Помощник установки", "", "Button11", "unCheck", "")
ControlCommand("Nero Burning ROM Помощник установки", "", "Button12", "unCheck", "")
ControlCommand("Nero Burning ROM Помощник установки", "", "Button13", "unCheck", "")
ControlCommand("Nero Burning ROM Помощник установки", "", "Button3", "Check", "")
Как сделать так чтобы я мог ставить разные комплекты прог?Мне кажется что должно выпадать при авторане примитивное окно с кнопочками типа:установить комплект_1,установить комплект_2 и т.д. В связи с этиим возник вопрос:можно ли это окно сделать в AutoIt?Или есть какие-то другие способы решения данной проблемы?Может у кого есть уже готовый скрипт-поделитесь пожалуйста.
Заранее благодарен.

Последний раз редактировалось Sanja Alone, 30-10-2006 в 08:38. Причина: добавление тэга code, замена серийника иксами


Отправлено: 13:08, 18-10-2006 | #412


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


xstranger
Цитата:
вот, я хотел бы поменять командный файл, на автоит скрипт
из приведенного куска не видно оснований для переезда на AutoIt - набор внешних команд проще вызвать из командного файла
Цитата:
есть ли в автоит какое либо подобие xcopy? чтобы копировались только новые файлы
такого точно нету, хотя несложно написать коротЕньку функцию, сравнивающую даты файлов перед заменой...

Отправлено: 13:09, 18-10-2006 | #413


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Michail77

Цитата:
можно ли это окно сделать в AutoIt?
Можно, примерно так:

Код: Выделить весь код
#NoTrayIcon
#Include <GuiConstants.au3>

$Title = "Выбор комплектов"

If WinExists($Title) Then Exit

GuiCreate($Title, 500, 250)

GUISetFont(13)
GUICtrlCreateLabel("Выбор комплектов", 170, 10)

GUISetFont(9)
$Complect1 = GUICtrlCreateCheckbox("Комплект 1", 60, 50)
$Complect2 = GUICtrlCreateCheckbox("Комплект 2", 60, 90)
$Complect3 = GUICtrlCreateCheckbox("Комплект 3", 60, 130)

$Next = GUICtrlCreateButton("Next>>", 440, 210, 50)
$Cancel = GUICtrlCreateButton("Cancel", 380, 210, 50)

GUISetState()

While 1
$Msg = GUIGetMsg()

Select	
	
	Case $Msg = $Gui_Event_Close or $Msg = $Cancel
		Exit

	Case $Msg = $Next
                  If GUICtrlRead($Complect1) <> 1 and GUICtrlRead($Complect2) <> 1 and GUICtrlRead($Complect3) <> 1 Then
		         GUISetState(@SW_DISABLE)
			    MsgBox(262144+48, "Attention", "Выберите как минимум одну птичку ;-)")
		         GUISetState(@SW_ENABLE)
                         WinActivate($Title, "")
		    ContinueLoop
		EndIf

		GUISetState(@SW_HIDE)
		
		If GUICtrlRead($Complect1) = $Gui_Checked Then
			;Тут должна выполняться установка комплекта № 1
		EndIf
		
		If GUICtrlRead($Complect2) = $Gui_Checked Then
			;Тут должна выполняться установка комплекта № 2
		EndIf
		
		If GUICtrlRead($Complect3) = $Gui_Checked Then
			;Тут должна выполняться установка комплекта № 3
		EndIf

EndSelect
Wend
У меня по поводу этого примера, есть один вопрос к знающим:

В примере я использовал метод диактивации гуи (Gui) перед выводом MsgBox (GUISetState(@SW_DISABLE)), и полсле нажатия на ОК, гуи активируется (GUISetState(@SW_ENABLE)). Но дело в том, что у меня, по не понятным причинам, после активации гуи, он как бы сворачивается. Почему это происходит, и как это предотвратить? - Я также в примере поставил активацию окна (WinActivate), но в момент активации окно на секунду мигает, хотелось бы достичь идеального способа диактивации и затем активации гуи интерфейса.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 15:37, 18-10-2006 | #414


Аватара для Sanja Alone

Ищу Человека…


Сообщения: 420
Благодарности: 67

Профиль | Сайт | Отправить PM | Цитировать


Michail77
Цитата:
стандартный комплект прог с небольшими изменениями
Я уже на руборде ответил - WPI. Впрочем, не только...

-------
Sanja Alone's site (ConvRegToAU3, OEsr, RSA, AutoIt скрипты)


Отправлено: 16:07, 18-10-2006 | #415


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Есть два вопроса (взаимосвязаны между собой):

1) Как можно узнать общий размер всех файлов (в байтах или мб) с определённым расширением, но учитывать файлы в подкаталогах? - Есть функция _FileListToArray, но она не учитывает подкаталоги, может можно её как то улучшить? (там требуется #include <File.au3>).

2) Возможно ли вычислить самый новый файл (взять имя файла и путь к нему в масив), в определённом каталоге - файлы из подкаталогов тоже должны учитываться.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 14:48, 23-10-2006 | #416


Пользователь


Сообщения: 116
Благодарности: 12

Профиль | Отправить PM | Цитировать


Мне необходимо отобразить процесс копирования MS Office 2003 на жесткий диск, а затем отобразить сам процес установки через AutoIt.
Сделал это с помощью ProgressOn & ProgressSet...
Не устраивает: во первых процегресс-бар при копировании не изменяется, а во время установки приложений прогресс бар переваливает за 100 проценнтов и установка приложения при этом продолжается:

Код: Выделить весь код
ProgressOn   ('Копирование MS Office 2003 на жесткий диск','Прогресс','Выполнено',-1,-1,18)
$pr=0
AdlibEnable  ('progresscopy',300)

If Not FileExists($diskC & '\Install\Office 2003 RUS SP2') Then DirCreate($diskC & '\Install\Office 2003 RUS SP2')
DirCopy(@ScriptDir & '\', $diskC & '\Install\Office 2003 RUS SP2', 1)
ProgressSet(2000 , "Done", "Complete")
sleep(500)
AdlibDisable ()

.....
ProgressOn   ('Установка MS Office 2003','Прогресс','Выполнено',-1,-1,18)
$pr=0
AdlibEnable  ('progress',300)
....
ProgressSet(1666 , "Done", "Complete")
sleep(500)
AdlibDisable ()
....
;----FUNCTION----------
Func progresscopy()
 $pr=$pr+1
  ProgressSet( $pr, $pr & " процент")
EndFunc

Func progress()
 $pr=$pr+1
  ProgressSet( $pr, $pr & " процент")
EndFunc

Отправлено: 21:39, 23-10-2006 | #417


Аватара для Sanja Alone

Ищу Человека…


Сообщения: 420
Благодарности: 67

Профиль | Сайт | Отправить PM | Цитировать


Creat0R
Цитата:
но учитывать файлы в подкаталогах
Оч. просто это сделать при пом. cmd-файла:
Код: Выделить весь код
@echo off
rem Каталог
set DIR=C:\Какой-то каталог\Какой-то подкаталог
rem Маска
set MASK=*.jpg
rem Выделенные слова должны быть в OEM-кодировке
for /F "usebackq tokens=3" %%j in (`dir "%DIR%\%MASK%" /s ^| find "байт" ^| find "файлов"`) do (set fsize=%%j)
echo Общий размер файлов %MASK% в каталоге "%DIR%" и его подкаталогах = %fsize% байт
Цитата:
вычислить самый новый файл
Здесь все муторней, т.к. соотв. ключ команды dir производит сортировку в пределах каждого подкаталога (/s), что неудобно, т.к. потребует последующего анализа. Т.е., придется бегать по всем подкаталогам и сравнивать дату/время наиболее новых файлов в каждом из них:
Код: Выделить весь код
rem Каталог
set DIR=C:\Какой-то каталог\Какой-то подкаталог
for /F "usebackq tokens=*" %%j in (`dir "%DIR%" /a:-d /o:-d /t:w /b`) do (set filen=%%j&& goto metka)
:metka
rem Cамый новый (по времени последнего изменения) файл каталога %DIR%
echo Самым новым файлом в каталоге "%DIR%" является "%filen%"
Можно и в "чистом" AutoIt сделать тоже самое: в цикле гонять по всем подкаталогам (что является каталогом легко узнать анализируя вывод ф-ции FileGetAttrib - если в строке есть буква D, значит это каталог).


sattva
Цитата:
Мне необходимо отобразить процесс копирования MS Office 2003 на жесткий диск
Если именно копирования, то придется копировать при пом. утилиты xxcopy и прогрессбар привязывать к месту на диске (почему именно xxcopy обсуждали еще в старой теме - посты #108, #111, #112, #113, #114). А если речь о процессе установки, то лучше для setup.exe задать ключ /qb! - и прогресс установки будет виден, и отменить ее будет невозможно (без убийства процесса ).

-------
Sanja Alone's site (ConvRegToAU3, OEsr, RSA, AutoIt скрипты)

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:17, 24-10-2006 | #418


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R

Если только средствами AutoIt, то вот что получилось
Код: Выделить весь код
#include <File.au3>
#include <Array.au3>
;Поиск самого нового файла
Func _NewestFile ($sPath, $sMask='*')
	Local $i, $dlist[1]=[0], $blist=_MyFileListToArray ($sPath, $sMask)
	If $blist[0]=0 Then Return ""
	For $i=1 To $blist[0]
		_ArrayAdd ($dlist, FileGetTime ($blist[$i], 0, 1))
	Next
	Return $blist[_ArrayMaxIndex ($dlist, 0, 1)]
EndFunc
;Размер файлов с учетом подкаталогов
Func _MyDirGetSize ($sPath, $sMask='*')
	Local $i, $size=0, $blist=_MyFileListToArray ($sPath, $sMask)
	If $blist[0]=0 Then Return 0
	For $i=1 To $blist[0]
		$size = $size + FileGetSize ($blist[$i])
	Next
	Return $size
EndFunc
;Возвращает массив имен файлов с учетом подкаталогов
Func _MyFileListToArray ($sPath, $sMask='*')
	Local $i, $j, $blist, $rlist[1]=[0], $dlist = _DirListToArray ($sPath)
	_ArrayAdd ($dlist, $sPath)
	For $i=1 To $dlist [0] +1
		$blist = _FileListToArray ($dlist [$i], $sMask, 1)
		If Not @error Then
			For $j=1 To $blist [0]
				_ArrayAdd ($rlist, $dlist[$i] & "\" & $blist [$j])
			Next
		EndIf
	Next
	$rlist [0] = UBound ($rlist) - 1
	Return $rlist
EndFunc
;Возвращает массив структуры подкаталогов
Func _DirListToArray ($sPath)
	Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2)
	If IsArray ($alist) Then
		For $i=1 To $alist [0]
			_ArrayAdd ($rlist, $sPath & "\" & $alist [$i])
			$blist = _DirListToArray ($sPath & "\" & $alist [$i])
			If $blist[0]>0 Then
				For $j=1 To $blist [0]
					_ArrayAdd ($rlist, $blist [$j])
				Next
			EndIf
		Next
	EndIf
	$rlist [0] = UBound ($rlist) - 1
	Return $rlist
EndFunc
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:47, 24-10-2006 | #419


Аватара для Angelus

Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вопрос, где в этом скрипте ошибка???
Код: Выделить весь код
Run ("d:\1\Winamp 5.24\Winamp 5.24.exe")
WinWait("Winamp Setup","License Agreement")
If Not WinActive("Winamp Setup","License Agreement")Then WinActivate("Winamp Setup","License Agreement")
WinWaitActive("Winamp Setup","License Agreement")
Send("{ENTER}")
WinWait("Winamp Setup","Choose Components")
If Not WinActive("Winamp Setup","Choose Components")Then WinActivate("Winamp Setup","Choose Components")
WinWaitActive("Winamp Setup","Choose Components")
Send("{ENTER}")
WinWait("Winamp Setup","Choose Install Options")
If Not WinActive("Winamp Setup","Choose Install Options")Then WinActivate("Winamp Setup","Choose Install Options")
WinWaitActive("Winamp Setup","Choose Install Options")
Send("{ENTER}")
WinWait("Winamp Setup","Choose Install Location")
If Not WinActive("Winamp Setup","Choose Install Location")Then WinActivate("Winamp Setup","Choose Install Location")
WinWaitActive("Winamp Setup","Choose Install Location")
Send("{ENTER}")
WinWait("Winamp Setup","Multi-user Settings")
If Not WinActive("Winamp Setup","Multi-user Settings")Then WinActivate("Winamp Setup","Multi-user Settings")
WinWaitActive("Winamp Setup","Multi-user Settings")
Send("{ENTER}")
WinWait("Winamp Setup","Internet Connection and Language Settings")
If Not WinActive("Winamp Setup","Internet Connection and Language Settings")Then WinActivate("Winamp Setup","Internet Connection and Language Settings")
WinWaitActive("Winamp Setup","Internet Connection and Language Settings")
Send("{DOWN}{DOWN}{TAB}{TAB}{TAB}{TAB}{ENTER}")
WinWait("Winamp Setup","Interface and Skin Selection")
If Not WinActive("Winamp Setup","Interface and Skin Selection")Then WinActivate("Winamp Setup","Interface and Skin Selection")
WinWaitActive("Winamp Setup","Interface and Skin Selection")
Send("{ENTER}")
If ProcessExists('winamp.exe') Then ProcessClose('winamp.exe')
If ProcessExists('winampa.exe') Then ProcessClose('winampa.exe')
If ProcessExists('EmusicClient.exe') Then ProcessClose('EmusicClient.exe')
Run ("d:\1\Winamp 5.24\winamp_5.24_rus.exe")
WinWait("Установка","Новости от")
If Not WinActive("Установка","Новости от")Then WinActivate("Установка","Новости от")
WinWaitActive("Установка","Новости от")
Send("{ENTER}")
WinWait("Установка","Выберите установки програмы")
If Not WinActive("Установка","Выберите установки програмы")Then WinActivate("Установка","Выберите установки програмы")
WinWaitActive("Установка","Выберите установки програмы")
Send("{ENTER}")
WinWait("Установка","Пожалуйста")
If Not WinActive("Установка","Пожалуйста")Then WinActivate("Установка","Пожалуйста")
WinWaitActive("Установка","Пожалуйста")
Send("{ENTER}")
If ProcessExists('winamp.exe') Then ProcessClose('winamp.exe')
If ProcessExists('winampa.exe') Then ProcessClose('winampa.exe')
If ProcessExists('EmusicClient.exe') Then ProcessClose('EmusicClient.exe')
Просто происходит не установка програмы, а бесконечный запуск скрипта......пути правильные....

Последний раз редактировалось Sanja Alone, 25-10-2006 в 04:02. Причина: добавление тэга code


Отправлено: 12:56, 24-10-2006 | #420



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.2] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход