PDA

Показать полную графическую версию : [Архив - Часть 1.2] AutoIt скрипты


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26

LORDMA
08-10-2006, 10:34
Всем здрасти!
Если кому нетрудно помогите с такой проблемкой. Вот написал скрипт для автоматической установки драйверов
(просто автоматизировал "Мастер установки оборудования") для установки драйверов с CD. Так вот помогите зациклить процесс выполнения скрипта (сразу говорю я не программист, многое я не могу делать ) я попробовал сам сделать но не получилось.
Заранее благодарен!!!! :) :)




Все ребята разобрался сам.Всем спасибо!

LORDMA
09-10-2006, 16:14
Мужики всем привет.
Если кому нетрудно объясните как правильно работать с функцией PixelSearch ( x , y )
Надо чтоб в клиентской части активного окна найден нужный цвета пиксель и если он найден происходит двойное нажание мыше в нужном месте окна. Делаю так

Run (запуск программы )

WinWaitActive('текст','',0)
Opt("PixelCoordMode", 2)
PixelSearch( 0, 53, 613, 391, 0x000000, 10 )
Sleep(5000)
$coord = PixelSearch( 0, 53, 613, 391, 0xFFFF00, 10 )
$coord1 = $coord

If $coord1 = $coord Then
;код, выполняемый если окно появилось
WinWaitActive('текст','',180)
Opt("MouseCoordMode",2)
MouseClick( "left", 67, 318, 2, 0 )
Else
;код, выполняемый если окно не появилось
EndIf

Сто процентов я здесь корявыми ручками напортачил. Пожалйста покажите как правильно?

xstranger
10-10-2006, 08:25
Не подскажете - как убрать с помощью AutoIt часы на таскбаре

Sanja Alone
10-10-2006, 14:23
xstranger
как убрать с помощью AutoIt часы на таскбареУбрать часы:
RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","HideClock","REG_DWORD",0x00000001)
Снова включить:
RegDelete("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer","HideClock")

Creat0R
10-10-2006, 18:25
LORDMA
Надо чтоб в клиентской части активного окна найден нужный цвета пиксель и если он найден происходит двойное нажание мыше в нужном месте окна.
Нажатие мышкой должно происходить в том месте где был найден пиксель?
Тогда попробуй так:


Opt("PixelCoordMode", 2)
Opt("MouseCoordMode",2)

Run (запуск программы )

;Ждём полного запуска процесса программы
ProcessWait(процесс программы\имя екзешника, 20)

;Выполнение дальнейшего скрипта, в случае если окно существует
If WinExists('текст','') Then

;На всякий случай, активируем окно
WinActivate('текст','')

;Ждём активности окна (три минуты - не слишкомм ли :) )
WinWaitActive('текст','',180)

;Ищем нужнй пиксель
$coord = PixelSearch( 0, 53, 613, 391, 0xFFFF00, 10 )

;Если пиксель найден, то жмём два раза левой кнопкой мышки в том месте где он найден
If Not @error Then MouseClick( "left", $coord[0], $coord[1], 2, 0)

EndIf

Если нужно нажать в другом месте, то вместо $coord[0] и $coord[1] нужно подставить свои соответствуюющие координаты (X и Y).

Lodoss
13-10-2006, 19:27
Есть потребность запускать некоторые exe файлы с параметрами определённой директории (как правило "лечилки" от жадности), например, строчка:

Run("с:\program files\everest\crack.exe")не срабатывает.

Приходится обходиться батником в котором прописано:
C:
cd Program Files\Everest
crack.exeЕсть ли способ в autoit указать параметр запуска в определённой директории? Хелп читал, думаю такая возможность есть, но не могу понять как это сделать.

P. S. Я новичок, помидорами не кидать :)

Sanja Alone
14-10-2006, 03:57
Lodoss
FileChangeDir ( @ProgramFilesDir & "\Everest" )
Run ( "crack.exe" )
есть ли способ в autoit указать параметр запуска в определённой директории?Run ( @ProgramFilesDir & "\Everest\crack.exe", @ProgramFilesDir & "\Everest" )Второй параметр и есть рабочий каталог, но часто от него мало толку. Приведенный выше способ надежнее.

LORDMA
14-10-2006, 22:15
Вот кому интересно нацарапал пару скриптов для автоматизации установки

драйверов после установки операционки(звук ,видео,и т.д.).
Нужно иметь только диск с распакованными драйверами, а скомпилированный скрипт

запускать через autorun.inf
Один скрипт определяет неустановленное оборудование по желтому

пикселю, а второй просто клацает по списку устройств в верхней строчке пока

невыскочет "Центр справки"
Это мои первые скрипты, так что сильно несудите.

Creat0R
Большое спасибо,за помощь!

xstranger
18-10-2006, 05:10
может кто подскажет код скрипта который делает следующее

Имеются общие задачи дня н количества файлов
например

modifype file
makecab file
start file
del %windir%\system32\file

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

Sanja Alone
18-10-2006, 05:59
xstranger
общие задачи дня н количества файлов#include <File.au3>

;каталог, с файлами к-рого нужно выполнять н-рые действия
$Dir='C:\Test'
;маска для отбора файлов
$Mask='*.*'

;составление списка файлов
$s=_FileListToArray($Dir,$Mask,1)

;действия над файлами
For $i=1 To $s[0]
;в данном примере - вывод имени файла
MsgBox (0,"Файл "&$i,$s[$i])
Next

xstranger
18-10-2006, 06:23
Спасибо за ответ, но если можно немного по прозрачнее

опишу мою ситуацию. у меня системные файлы патчатся ресурсами в стиле висты на этапе 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? чтобы копировались только новые файлы, если есть, то скажите куда смотреть

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

Michail77
18-10-2006, 13:08
Всем привет!
Может кто поможет.
Есть такая необходтмость устанавливать софт с диска на компы(ежедневно около 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?Или есть какие-то другие способы решения данной проблемы?Может у кого есть уже готовый скрипт-поделитесь пожалуйста.
Заранее благодарен.

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

Creat0R
18-10-2006, 15:37
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), но в момент активации окно на секунду мигает, хотелось бы достичь идеального способа диактивации и затем активации гуи интерфейса.

Sanja Alone
18-10-2006, 16:07
Michail77
стандартный комплект прог с небольшими изменениями
Я уже на руборде ответил (http://forum.ru-board.com/topic.cgi?forum=5&topic=17705&start=20#4) - WPI. Впрочем, не только...

Creat0R
23-10-2006, 14:48
Есть два вопроса (взаимосвязаны между собой):

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

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

sattva
23-10-2006, 21:39
Мне необходимо отобразить процесс копирования 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

Sanja Alone
24-10-2006, 07:17
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 (http://www.xxcopy.com/download/xxcopy.zip) и прогрессбар привязывать к месту на диске (почему именно xxcopy обсуждали еще в старой теме - посты #108 (http://forum.oszone.net/post-352038-108.html), #111 (http://forum.oszone.net/post-352408-111.html), #112 (http://forum.oszone.net/post-352424-112.html), #113 (http://forum.oszone.net/post-352640-113.html), #114 (http://forum.oszone.net/post-352666-114.html)). А если речь о процессе установки, то лучше для setup.exe задать ключ /qb! - и прогресс установки будет виден, и отменить ее будет невозможно (без убийства процесса :) ).

amel27
24-10-2006, 10:47
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

Angelus
24-10-2006, 12:56
Вопрос, где в этом скрипте ошибка???
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')
Просто происходит не установка програмы, а бесконечный запуск скрипта......пути правильные....




© OSzone.net 2001-2012