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

Компьютерный форум 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

 

Аватара для DenchikK

Старожил


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

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


Creat0R
Суть работы скрипта такова:
Заливка файлов по списку ссылок в аккаунты, доступ к которым задается логином и паролем.
То есть со стороны юзеа это выглядит так: он подготоавливает список ссылок на файлы, которые хочет скачать, и список пустых аккаунтов, в которые эти ссылки будут помещены. 1 линк = 1 аккаунт. При запуске скрипта юзер выбирает, в какой именно аккаунт будет заливаться любой по списку файл по линку (radibutton подходит лучше, но я что то до сих пор с опреатором case из примера не разобрался):
http://img154.imageshack.us/img154/3923/1autowa8.jpg

И вот когда выбран нужный аккаунт, поле самой программы заполняется:
http://img154.imageshack.us/img154/8333/2autoyc1.jpg

В поле линк - идет ссылка, тут наверное даже не принципиально её положение в файле, пускай будет самая первая в списке (ещё б сделать в этом случае её удаление из списка, после заполнения поля)
В поле Логин - тот Логин, что выбран, в поле Пароль - соответствующий ему пароль . Например 6 логин сверху соответствует 6 сверху паролю (то же былоб интереснее, чтоб после заполнения они бы стирались).

Вообщем как то так...

Спасибо Вам что Вы со мною возитесь! :-)

Последний раз редактировалось DenchikK, 01-06-2007 в 18:34.


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



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

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


Аватара для voler

Ветеран


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

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


Проблема, при отработке скрипта. Ставлю прогу , кто может объясните почему нажатие кнопок не срабатывает. В предыдущем посте мне объяснили в чем проблема. Но не помогает.

HTML код: Выделить весь код
#cs ---------------------- ---------------------- #ce ;предотвращение возможности множественного запуска скрипта If WinExists(@ScriptName) Then Exit AutoItWinSetTitle(@ScriptName) ;Отображать текущую строку сценария с помощью индикатора системной панели в режиме отладки. AutoItSetOption("TrayIconDebug", 1) ; Установка переменных Global $file='hddinsp.exe', $ACStr Run ( $file ) WinWaitActive ( 'Installer Language', 'Please select a language.' ) ControlClick ( 'Installer Language', 'Please select a language.', 'Button1' ) WinWaitActive ( 'Установка Hard Drive Inspector Professional', 'Мастер установки Hard Drive Inspector Professional' ) ControlClick ( 'Установка Hard Drive Inspector Professional', 'Мастер установки Hard Drive Inspector Professional', 'Button2' ) WinWaitActive ( 'Установка Hard Drive Inspector Professional', 'Лицензионное соглашение' ) ControlClick ( 'Установка Hard Drive Inspector Professional', 'Лицензионное соглашение', 'Button4' ) WinWaitActive ( 'Установка Hard Drive Inspector Professional', 'Лицензионное соглашение' ) ControlClick ( 'Установка Hard Drive Inspector Professional', 'Лицензионное соглашение', 'Button2' ) WinWaitActive ( 'Установка Hard Drive Inspector Professional', 'Выбор папки установки' ) ControlClick ( 'Установка Hard Drive Inspector Professional', 'Выбор папки установки', 'Button2' ) WinWaitActive ( 'Установка Hard Drive Inspector Professional', 'Папка в меню "Пуск"' ) ControlClick ( 'Установка Hard Drive Inspector Professional', 'Папка в меню "Пуск"', 'Button2' ) WinWaitActive ( 'Установка Hard Drive Inspector Professional', 'Установка завершена' ) ControlClick ( 'Установка Hard Drive Inspector Professional', 'Установка завершена', 'Button2' ) WinWaitActive ( 'Установка Hard Drive Inspector Professional', 'Завершение работы мастера установки' ) ControlClick ( 'Установка Hard Drive Inspector Professional', 'Завершение работы мастера установки', 'Button4' ) WinWaitActive ( 'Установка Hard Drive Inspector Professional', 'Завершение работы мастера установки' ) ControlClick ( 'Установка Hard Drive Inspector Professional', 'Завершение работы мастера установки', 'Button2' ) exit


Отправлено: 14:55, 01-06-2007 | #462


Аватара для ChVL

Старожил


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

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


Сразу недосмотрел. Скомпилированный exe работает, но только тогда, когда рядом присутствует исходный exe, т.е. ничем не отличается от работы со скриптом au3. Самостоятельно НЕ запускается - сразу же требует исходный exe. Декомпилировал его с помощью Exe2Aut и увидел, что в него один к одному переписан скрипт и больше ничего нет, хотя объём около 200 KB.
Интересный момент: видимое содержимое декомпилированного exe с одинаковыми именами (который вообще не запускается) абсолютно аналогично описанному выше (это просто текст скрипта), и объёмы у них одинаковы.
Где ещё копать?

Отправлено: 15:28, 01-06-2007 | #463


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


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

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


voler
Цитата:
Ставлю прогу , кто может объясните почему нажатие кнопок не срабатывает.
Проверил несколько кнопок - работает, но только тогда, когда окно активно...
Я бы заменил WinWaitActive на WinWait(), поскольку ControlClick() умеет работать даже с неактивными окнами, и вполне достаточно просто дождаться появления окна.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:29, 01-06-2007 | #464


Аватара для Creat0R

Must AutoIt


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

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


DenchikK
Попробую переформулировать (для проверки, правильно ли я понял):

Запускаем скрипт, создаются столько чекбоксов, сколько есть записей в файле линков (и только для этих записей создаём чекбоксы)...

а точнее (как я понял), создаём radio button

Далее после нажатия на Старт, в каждое поле вписывается соответственно - Ссылка, логин, и пароль.

Вот только есть одна проблема - какое должно быть название у чекбоксов? можно совместить что то вроде этого:

Login_pass_link (как у тебя на скрине)... и потом разделять это на три значения, для того чтобы выявить нужные данные для записи в прогу.

Такой вопрос:
А списки обязательно держать в трёх разных файлах? может можно записывать в один ini файл (к примеру AvaRemote.ini), чтобы имя секции ровнялось ссылке, а под секцией записи пароля и логина, что то типа такого:

Код: Выделить весь код
[http://mail.ru]
loging1=DenchikK
pass1=12345

login2=DenchikK
pass2=54321

и т.д
Так будет намного эргономичнее и удобнее обрабатывать данные.

Работать с Radio button совсем не сложно, почти также как и с обычными чекбоксами, разница только в том что может быть выбран один пункт в определённой группе (при наличии таковой).

Вот пример:

Код: Выделить весь код
GUICreate("test")

$Radio1 = GUICtrlCreateRadio("Radio1", 10, 40)

$Radio2 = GUICtrlCreateRadio("Radio2", 10, 70)

$Radio3 = GUICtrlCreateRadio("Radio3", 10, 100)

$ShowSelectedButton = GUICtrlCreateButton("Show checked button", 150, 200)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case -3
            Exit
        Case $ShowSelectedButton
            Select
                Case GUICtrlRead($Radio1) = 1
                    MsgBox(0, "", "This radio button checked: " & GUICtrlRead($Radio1, 1))
                Case GUICtrlRead($Radio2) = 1
                    MsgBox(0, "", "This radio button checked: " & GUICtrlRead($Radio2, 1))
                Case GUICtrlRead($Radio3) = 1
                    MsgBox(0, "", "This radio button checked: " & GUICtrlRead($Radio3, 1))
            EndSelect
    EndSwitch
WEnd

ChVL
Цитата:
Скомпилированный 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

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

Отправлено: 03:19, 02-06-2007 | #465


Аватара для DenchikK

Старожил


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

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


Creat0R
Цитата:
Запускаем скрипт, создаются столько чекбоксов, сколько есть записей в файле линков (и только для этих записей создаём чекбоксы)...
Почти так - только не линков, а логинов. :-)

Цитата:
Вот только есть одна проблема - какое должно быть название у чекбоксов?
Названия - как у логинов.

Цитата:
А списки обязательно держать в трёх разных файлах? может можно записывать в один ini файл (к примеру AvaRemote.ini)
Это было б вообще прекрасно! Я и не знал о такой возможности!

Цитата:
Работать с Radio button совсем не сложно, почти также как и с обычными чекбоксами
Спасибочки! Сейчас буду пробовать работать с Radio Button

Добавлено ещё раз :-)
C radiobutton кое как разобрался. С ini файлом вроде то же (спасибо огромное за подсказку его использовать! так стало гораздо удобнее ). Вот немного уменьшил скрипт, как смог:
Код: Выделить весь код
#include <GUIConstants.au3>
#include <File.au3>

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

Global $i, $file, $group_1, $group_2, $group_3, $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($Links_Array) Then
;    $Top = 20
;    For $i = 1 To Logins_Array[0][0]
;    GUICtrlCreateRadio($Logins_Array[$i][1], 10, $Top)
;    $Top += 20
;    Next
;EndIf

$Radio1 = GUICtrlCreateRadio($Logins_Array[1][1], 10, 20)
$Radio2 = GUICtrlCreateRadio($Logins_Array[2][1], 10, 40)
$Radio3 = GUICtrlCreateRadio($Logins_Array[3][1], 10, 60)
$Radio4 = GUICtrlCreateRadio($Logins_Array[4][1], 10, 80)
$Radio5 = GUICtrlCreateRadio($Logins_Array[5][1], 10, 100)
$Radio6 = GUICtrlCreateRadio($Logins_Array[6][1], 10, 120)
$Radio7 = GUICtrlCreateRadio($Logins_Array[7][1], 10, 140)
$Radio8 = GUICtrlCreateRadio($Logins_Array[8][1], 10, 160)
$Radio9 = GUICtrlCreateRadio($Logins_Array[9][1], 10, 180)
$Radio10 = GUICtrlCreateRadio($Logins_Array[10][1], 10, 200)
$Radio11 = GUICtrlCreateRadio($Logins_Array[11][1], 10, 220)
$Radio12 = GUICtrlCreateRadio($Logins_Array[12][1], 10, 240)
$Radio13 = GUICtrlCreateRadio($Logins_Array[13][1], 10, 260)
$Radio14 = GUICtrlCreateRadio($Logins_Array[14][1], 10, 280)
$Radio15 = GUICtrlCreateRadio($Logins_Array[15][1], 10, 300)
$Radio16 = GUICtrlCreateRadio($Logins_Array[16][1], 10, 320)

$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
            Exit
   
	Case $Close
            Exit

	Case $Server1

		WinActivate ("AvaRemoteLoad")
		ControlClick ( 'AvaRemoteLoad', '', "Button4")

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

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

	Case $Server2
		WinActivate ("AvaRemoteLoad")
		ControlClick ( 'AvaRemoteLoad', '', "Button4")

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

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

	Case $Start

	Select

	Case GUICtrlRead($Radio1) = 1
		$i = 1
	Case GUICtrlRead($Radio2) = 1
		$i = 2
	Case GUICtrlRead($Radio3) = 1
		$i = 3
	Case GUICtrlRead($Radio4) = 1
		$i = 4
	Case GUICtrlRead($Radio5) = 1
		$i = 5
	Case GUICtrlRead($Radio6) = 1
		$i = 6
	Case GUICtrlRead($Radio7) = 1
		$i = 7
	Case GUICtrlRead($Radio8) = 1
		$i = 8
	Case GUICtrlRead($Radio9) = 1
		$i = 9
	Case GUICtrlRead($Radio10) = 1
		$i = 10
	Case GUICtrlRead($Radio11) = 1
		$i = 11
	Case GUICtrlRead($Radio12) = 1
		$i = 12
	Case GUICtrlRead($Radio13) = 1
		$i = 13
	Case GUICtrlRead($Radio14) = 1
		$i = 14
	Case GUICtrlRead($Radio15) = 1
		$i = 15
	Case GUICtrlRead($Radio16) = 1
		$i = 16
            EndSelect

                     WinActivate ("AvaRemoteLoad")
	     ControlSetText ( 'AvaRemoteLoad', '', 'Edit1', $Links_Array[$i][1])
                     ControlSetText ( 'AvaRemoteLoad', '', 'Edit2', $Logins_Array[$i][1])
                     ControlSetText ( 'AvaRemoteLoad', '', 'Edit3', $Pass_Array[$i][1]) 

EndSwitch
WEnd
И вот тут у меня появляется такая затыка:

Для последующей обработки выбора radiobutton
Код: Выделить весь код
Case GUICtrlRead($Radio1) = 1
		$i = 1
пытался впихнуть строчку
Код: Выделить весь код
If IsArray($Logins_Array) Then
    $Top = 20
    For $i = 1 To Logins_Array[0][0]
    GUICtrlCreateRadio($Logins_Array[$i][1], 10, $Top)
   $Radio[$i] = GUICtrlCreateRadio($Logins_Array[$i][1], 10, $Top)
    $Top += 20
    Next
EndIf
но не получилось, вываливается ошибка. Как сопоставить теперь автоматическое рисование нужного количества радиобутаннов и их работу - ума не приложу...

Последний раз редактировалось DenchikK, 04-06-2007 в 02:20.


Отправлено: 12:02, 02-06-2007 | #466


Googler


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

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


Diamond
Цитата:
Я бы заменил WinWaitActive на WinWait()
+1
Почему-то был уверен, что поставил WinWait(), уже исправил...

V0van3
Цитата:
к сожалению в данном случае не всё так просто. видимо вы не проверяли
+1
конечно не проверял, нынче найти 16-битное приложение не так просто... вот навскидку два варианта:

Простой и надежный способ ценой лишнего CMD-процесса:
Код: Выделить весь код
$exe = 'Vcmurbas.exe' ; Имя 16-битного приложения
$dir = 'C:\Program Files\Vcmurbas' ; Путь к каталогу программы
$pid = Run(@COMSPEC & ' /C START /WAIT /SEPARATE ' & $exe, $dir, @SW_HIDE)

While ProcessExists($pid)
  Sleep(200)
WEnd
Более "навороченный", но без дополнительных процессов:
Код: Выделить весь код
$exe = 'Vcmurbas.exe' ; Имя 16-битного приложения
$dir = 'C:\Program Files\Vcmurbas' ; Путь к каталогу программы

$PDL = ProcessList ('ntvdm.exe')
Run (@COMSPEC & ' /C START /SEPARATE ' & $exe, $dir, @SW_HIDE)
$PID = _ProcessListWait($PDL, 'ntvdm.exe')

While ProcessExists($pid)
  Sleep(200)
WEnd

; Функция, которая сравнивает списки процессов до появления различий
; и возвращает PID нового процесса.
Func _ProcessListWait (ByRef $arrPLOld, $strPName = '')
    Local $i, $arrPLNew, $strPLOld='', $newPID=0
    For $i=1 To $arrPLOld[0][0]
        $strPLOld &= $arrPLOld[$i][1] &';'
    Next
    Do
        Sleep (100)
        If @NUMPARAMS=1 Then $arrPLNew = ProcessList()
        If @NUMPARAMS=2 Then $arrPLNew = ProcessList($strPName)
        For $i=1 To $arrPLNew[0][0]
            If StringInStr($strPLOld, $arrPLNew[$i][1]&';')=0 Then $newPID=$arrPLNew[$i][1]
        Next
    Until $newPID
    Return $newPID
EndFunc
З.Ы. Во 2-м случае можно обойтись без @COMSPEC если настроить систему на запуск каждого 16-битного приложения в отдельном NTVDM-процессе: ключ реестра HKLM\SYSTEM\CurrentControlSet\Control\WOW, параметр DefaultSeparateVDM = "yes"

Отправлено: 05:20, 03-06-2007 | #467


Аватара для ChVL

Старожил


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

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


Creat0R
Цитата:
Цитата:
Скомпилированный exe работает, но только тогда, когда рядом присутствует исходный exe
Это напряму зависит от того, какой состав скрипта, возможно в скрипте используются данные читаемые при выполнении из самого скрипта - чтобы сказать более точно, необходимо видеть исходный код.
Использовал разные au3, в том числе и от Sanja Alone. Во всех случаях скомпилированный exe имеет объём чуть больше 200 КВ, не зависит от объёма исходного exe и от того, какая прога устанавливается.

Отправлено: 19:55, 03-06-2007 | #468


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


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

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


amel27
Цитата:
Почему-то был уверен, что поставил WinWait(), уже исправил...
А я был уверен что идея принадлежит voler ...
Это и не ошибка вовсе, а всего лишь другой способ.

Отправлено: 22:15, 03-06-2007 | #469


Googler


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

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


Diamond
Цитата:
Это и не ошибка вовсе, а всего лишь другой способ
ИМХО при автоматизации установки имеют смысл только два варианта:

- WinWait()+ControlClick()/ControlCommand()
- WinWait()+WinActivate()+Send().

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



Компьютерный форум 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




 
Переход