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

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

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

Старожил


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

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


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





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


Руководство к действию по работе c AutoIt.

Помогите пожалуйста. Нужен маленький скриптик для решения некоторых рутинных задачь.
Вот что нужно сделать последовательно:

1) в папке DIR1 находим и удаляем файлы в названии которых присутствует text_1
2) в папке DIR2 находим xxx.sif и удаляем строки, в которых присутствует text_1
3) в папке DIR3 находим xxx.inf и добавляем в его секцию [XXX] несколько строчкек (text_2, text_3, ..., text_n)
4) в папке DIR4 находим yyy.inf ищем в его секции [YYY] text_4 и заменяем его на text_5
5) сохраняем все изменения и выводим отчёт о проделанной работе :-)

Заранее благодарен.

Отправлено: 05:05, 03-12-2006

 

Аватара для Creat0R

Must AutoIt


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

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


DenchikK
Цитата:
в соответствии с ini файлом, как я понял, переделал так:
Не совсем верно, дело в том, что функция IniReadSection() возвращяет двумерный массив, нулевой элемент ([0]), как и в других обычных массивах, содержит общее число элементов массива.
Построение цикла, должно быть так:

Код: Выделить весь код
For $i = 1 To NN

Next
Тут For $i = 1, означает что для переменной $i, в теле цикла, будет присваиваться возрастающее значение от 1 и до NN (вместо NN нам и нужно подставить общее число элементов нашего массива, в данном случае, это $Logins_Array[0][0], иногда, обычно самодельные массивы, могут быть построены неверно, поэтому надёжнее проверять общее число массива, используя функцию Ubound, но при этом нужно отнять 1, чтобы нулевой элемент не учитывался:

Код: Выделить весь код
For $i = 1 To Ubound($Logins_Array) - 1
     
Next
Или используем нулевой элемент для выявления общего числа элементов массива (не самый надёжный метод):

Код: Выделить весь код
For $i = 1 To $Logins_Array[0][0]
     
Next
В справке написано, что функция IniReadSection(), возвращает двумерный массив, теперь его элементы присваиваются так:

Logins_Array[N][0] = Ключь в Ini-Файле
Logins_Array[N][1] = Значение этого же ключа (ключ это то что идёт перед знаком ровно в Ini-файле).

Цитата:
пытался впихнуть строчку
Тут тоже ошибка, ведь в начале идёт проверка переменной, является ли она массивом - If IsArray($Links_Array) Then...

Но в теле условия (If ... Then ... EndIf), массив обрабатывается совсем другой...

GUICtrlCreateRadio($Logins_Array[$i][1], 10, $Top)...

Вот отсюда и может быть вызвана ошибка.


Попытка №2 :

(Добавил также немного проверок на ошибочность).

Код: Выделить весь код
#include <GUIConstants.au3>

If WinExists(@ScriptName) Then Exit
AutoItWinSetTitle(@ScriptName)
AutoItSetOption("TrayIconDebug", 1)
AutoItSetOption("SendKeyDelay", 60)
AutoItSetOption("MouseCoordMode", 0)

Global $group_1, $group_2, $group_3, $RadioArr[1], $Links_Array, $Logins_Array, $Pass_Array, $Servers_Array, $Secrets_Array

; Запуск программы

Run ('avaload.exe')

; Считывание Данных

$Logins_Array = IniReadSection("ava.ini", "logins")
$Pass_Array = IniReadSection("ava.ini", "pass")
$Links_Array = IniReadSection("ava.ini", "links")
$Servers_Array = IniReadSection("ava.ini", "servers")
$Secrets_Array = IniReadSection("ava.ini", "secrets")

; Построение GUI

GUICreate("Автозаполнение", 340, 350)

If IsArray($Logins_Array) Then
	ReDim $RadioArr[UBound($Logins_Array)]
	$Top = 20
    For $i = 1 To UBound($Logins_Array)-1
		$RadioArr[$i] = GUICtrlCreateRadio($Logins_Array[$i][1], 10, $Top)
		$Top += 20
    Next
EndIf

$Start = GUICtrlCreateButton("Заполнить", 210, 20, 120, 20)
$Close = GUICtrlCreateButton("Выход", 210, 40, 120, 20)
$Server1  = GUICtrlCreateButton("Сервер 1", 210, 60, 120, 20)
$Server2  = GUICtrlCreateButton("Сервер 2", 210, 80, 120, 20)

$group_1 = GUICtrlCreateGroup ("Выбор Аккаунта", 5, 5, 190, 340)
$group_2 = GUICtrlCreateGroup ("Кнопочки", 205, 5, 130, 100)
$group_3 = GUICtrlCreateGroup ("Описание", 205, 105, 130, 240)

$Label1 = GUICtrlCreateLabel("    Описание Работы", 210, 120)
$Label2 = GUICtrlCreateLabel("1. Впишите в ava.ini", 210, 140)
$Label3 = GUICtrlCreateLabel("линки,логины,пароли,", 210, 155)
$Label4 = GUICtrlCreateLabel("параметры серверов.", 210, 170)
$Label5 = GUICtrlCreateLabel("2. Выберите Сервер", 210, 185)
$Label6 = GUICtrlCreateLabel("3. Выберите пустой ", 210, 200)
$Label7 = GUICtrlCreateLabel("аккаунт для заливки. ", 210, 215)
$Label8 = GUICtrlCreateLabel("     Принцип работы: ", 210, 235)
$Label9 = GUICtrlCreateLabel("Например, выбираем", 210, 250)
$Label10 = GUICtrlCreateLabel("первый логин,в него", 210, 265)
$Label11 = GUICtrlCreateLabel("будет заливаться ", 210, 280)
$Label12 = GUICtrlCreateLabel("первый линк. и.т.д", 210, 295)
$Label13 = GUICtrlCreateLabel("             Удачи! ", 210, 315)

GUISetState ()

; Основная Работа Скрипта

GUISetState()  ; display the GUI

While 1
    Switch GUIGetMsg()
        Case -3, $Close
            Exit
		Case $Server1
			
			If UBound($Servers_Array) < 2 Or UBound($Secrets_Array) < 2 Then
				MsgBox(48, "Ошибка", "Извените, невозможно продолжить, видимо не были найдены данные серверов")
				ContinueLoop
			EndIf
			
			WinActivate ("AvaRemoteLoad")
			ControlClick ( 'AvaRemoteLoad', '', "Button4")

			WinWaitActive ('Настройки')
			ControlSetText ( 'Настройки', '', 'Edit1', $Servers_Array[1][1])
			ControlSetText ( 'Настройки', '', 'Edit2', $Secrets_Array[1][1])

			ControlClick ( 'Настройки', '', "Button2")

		Case $Server2
			
			If UBound($Servers_Array) < 3 Or UBound($Secrets_Array) < 3 Then
				MsgBox(48, "Ошибка", "Извените, невозможно продолжить, видимо не были найдены данные серверов")
				ContinueLoop
			EndIf
			
			WinActivate ("AvaRemoteLoad")
			ControlClick ( 'AvaRemoteLoad', '', "Button4")

			WinWaitActive ('Настройки')
			ControlSetText ( 'Настройки', '', 'Edit1', $Servers_Array[2][1])
			ControlSetText ( 'Настройки', '', 'Edit2', $Secrets_Array[2][1])

			ControlClick ( 'Настройки', '', "Button2")

		Case $Start
			
			Local $iSet = 0
			For $i = 1 To UBound($Logins_Array)-1
				If GUICtrlRead($RadioArr[$i]) = 1 Then
					$iSet = $i
					ExitLoop
				EndIf
			Next
			
			If $iSet = 0 Then
				MsgBox(48, "Ошибка", "Выберите пожалуйста один из логинов")
				ContinueLoop
			EndIf
			
			If $iSet > UBound($Links_Array)-1 Or $iSet > UBound($Logins_Array)-1 Or $iSet > UBound($Pass_Array)-1 Then
				MsgBox(48, "Ошибка", "Извените, невозможно продолжить, видимо не были найдены данные линков/логинов/паролей")
				ContinueLoop
			EndIf
			
			WinActivate ("AvaRemoteLoad")
			ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[$iSet][1])
			ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[$iSet][1])
			ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[$iSet][1])

	EndSwitch
WEnd
ChVL
Цитата:
Во всех случаях скомпилированный exe имеет объём чуть больше 200 КВ, не зависит от объёма исходного exe и от того, какая прога устанавливается.
Не вижу связи с поставленной проблемой...

Цитата:
Скомпилированный exe работает, но только тогда, когда рядом присутствует исходный exe


...И с тем что я написал

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

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

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

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

Отправлено: 02:48, 04-06-2007 | #471



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

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


Аватара для ChVL

Старожил


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

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


Creat0R
Ещё конкретнее.
Беру autoit-winamp.au3 (7.43 KB) от Sanja Alone и winamp533_pro.exe (6.33 MB). Компилирую. Теперь autoit-winamp.exe имеет объём 205 КВ. Это правильно? Этот autoit-winamp.exe работает только тогда, когда рядом находится winamp533_pro.exe.

Отправлено: 05:27, 04-06-2007 | #472


Аватара для Creat0R

Must AutoIt


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

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


ChVL
Цитата:
Этот autoit-winamp.exe работает только тогда, когда рядом находится winamp533_pro.exe.
Значит в самом скрипте путь к winamp533_pro.exe указан тот же в котором находится сам скрипт, либо вовсе не указан (в таком случае, путь обычно проверяется в соответствии с рабочим каталогом).

Но я всё же не понимаю связи с этим:

Цитата:
Скомпилированный exe работает, но только тогда, когда рядом присутствует исходный exe
Либо тут неправильная подстановка термина “исходный exe”, либо я чего то недопонимаю... в моём понимании “исходный exe”, это не скомпилированный скрипт - именно на основе этого понимания я и ответил:

Цитата:
Это напряму зависит от того, какой состав скрипта, возможно в скрипте используются данные читаемые при выполнении из самого скрипта - чтобы сказать более точно, необходимо видеть исходный код.
А в чём собственно проблема?

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

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

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


Отправлено: 06:01, 04-06-2007 | #473


Googler


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

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


Creat0R
Цитата:
Или используем нулевой элемент для выявления общего числа элементов массива (не самый надёжный метод):
Хм... Почему "ненадежный"?.. Не вижу смысла подсчитывать количество элементов если это уже сделала за нас функция... двойная работа получается. Откуда такое недоверие к разработчикам?

Отправлено: 06:33, 04-06-2007 | #474


Аватара для Creat0R

Must AutoIt


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

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


amel27
Цитата:
Откуда такое недоверие к разработчикам?
Я это на всякий случай пишу, потому что лучше перестраховаться, при наличии больших скриптов, можно “не вспомнить” кто создавал массив, встроенная функция, или построенный нами цикл (или просто “рукописный массив”)

Я вовсе не утверждал что нужно не доверять встроенным функциям, я им очень даже доверяю (но проверяю ), ведь если бы не доверял, то и небыло бы для меня повода использовать ту же встроенную функцию Ubound()

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

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

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


Отправлено: 06:43, 04-06-2007 | #475


Старожил


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

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


ChVL
Цитата:
Теперь autoit-winamp.exe имеет объём 205 КВ. Это правильно?
Да, правильно.
Цитата:
Этот autoit-winamp.exe работает только тогда, когда рядом находится winamp533_pro.exe.
Естественно, ведь он запускает winamp533_pro.exe, а затем производит над его окном определенные действия. Если же ты хотел, чтобы получился всего один файл, то прочитай справку по fileinstall (). Тогда winamp533_pro.exe будет помещен внутрь скрипта и получится один exe большого размера.

Отправлено: 06:44, 04-06-2007 | #476


Аватара для DenchikK

Старожил


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

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


Creat0R
Огромное Вам спасибо! Буду разбираться.

Отправлено: 13:01, 04-06-2007 | #477


Аватара для ChVL

Старожил


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

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


VelDmi
Спасибо!
C помощью FileInstall поместил дистрибутив в скомпилированный скрипт (по размеру скрипта всё сходится). Как теперь сделать так, чтобы скрипт при запуске использовал именно этот exe, а не требовал его снаружи?

Второй вопрос. Как сделать так, чтобы не мелькали окна приложения в процессе установки?

Отправлено: 17:04, 04-06-2007 | #478


Аватара для Creat0R

Must AutoIt


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

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


ChVL
Цитата:
Как теперь сделать так, чтобы скрипт при запуске использовал именно этот exe, а не требовал его снаружи?
FileInstall() позволяет помещать файлы в скомпилированный скрипт, чтобы потом они распаковывались в указанное место, вот перед всеми основными действиями скрипта, нужно прописать установку нужного файла, можно распаковывать с любым указанным именем, в данном случае, можно взять имя самого скрипта, и прибавить к нему приставку _Setup:

Код: Выделить весь код
$WinampPath = StringTrimRight(@ScriptFullPath, 4) & "_Setup.exe"
FileInstall("winamp533_pro.exe", $WinampPath, 1)
Run($WinampPath)
Цитата:
Как сделать так, чтобы не мелькали окна приложения в процессе установки?
Либо запустить приложение в скрытом режиме ( Run($WinampPath, "", @SW_HIDE) ), либо прятать окна в процессе (см. WinSetState("Title", "Text", @SW_HIDE) )

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

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

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


Отправлено: 18:49, 04-06-2007 | #479


Аватара для ChVL

Старожил


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

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


Creat0R
Спасибо!
C FileInstall() разобрался, работает. Не сразу, правда, понял, что AutoIt принципиально не переваривает кириллицу в директории (безуспешно пытался использовать Рабочий стол).

Со скрытым режимом не получается.
Запуск ( Run($WinampPath, "", @SW_HIDE) ) на окна, выскакивающие в процессе установки, не влияет (не скрывает).
Функция WinSetState оказалась несовместимой с WinWaitActive. Если WinSetState ставить перед WinWaitActive, то последняя не работает. Если после - нет смысла, т.к. окно уже промелькнуло.
Эти варианты пробовал и раньше, а другие не нашёл.

Отправлено: 21:07, 04-06-2007 | #480



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] 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.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход