PDA

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


Страниц : 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17

bogomolv
15-08-2005, 19:03
Sanja Alone

Well job!

Geck
20-08-2005, 10:07
Люди подскажите пожалуйста как можно из экселевской таблички скопировать данные (количество строк не фиксированное, столбцы фиксированные)?

bogomolv
21-08-2005, 08:56
Geck

Обработать xls-файл вряд-ли удастся - слишком сложная структура файла.
А вот обработать окно с открытой таблицей легко - через Send('^{Ins}) или ControlGetText().

Geck
21-08-2005, 10:31
bogomolv
Спасибо... А как можно определить когда данные закончатся?
Можно конечно вручную править количество повторов в цикле, но это не выход.

Geck
21-08-2005, 10:32
bogomolv
Кстати через ControlGetText() не получается, только через Send

demo369
23-08-2005, 17:30
Добрый вечер
Вопрос по поводу скрипта от Lingvo
Сдела папочку Lingvо, сложил туда все нужные файлики:
/vfd
AutoIt3.exe
ling10me_flp.IMA
lingvo.au3
lingvo.exe
LV10ML.iso
Запускаю
AutoIt3.exe lingvo.au3
Доходит до принятия лицензионного соглашения и виснет.
Причем стоит точка на отказе принятия лицензионного соглашения
Может где-нибудь в скрипте ошибка?

Я так понимаю ошибка должна быть здесь:
ControlClick ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор', 'Button3' )
Такой функции не нашел в описании. AutoIT 3.1.1

Sanja Alone
30-08-2005, 02:09
demo369
Запускаю AutoIt3.exe lingvo.au3В принципе, так тоже должно работать, т.к. я применял макрос @ScriptDir в путях, но я всегда использую откомпилированные в exe скрипты, а данный вариант запуска установки Lingvo не тестировал вовсе.

Может где-нибудь в скрипте ошибка?Пару десятков раз проверял на VMWare и 2 раза на реальных компах - все было ОК.
Почему скрипт может не работать:
1. Не выполнен пункт 4 оригинального поста - Alcohol или Daemon ни разу не запускались.
2. Другой дистрибутив Lingvo и, следовательно, отличные от приведенных в скрипте названия окон, текст в окнах, названия эл-тов (ну не Button3, а Button2, например), другое имя msi-файла в корне исошки Lingvo и т.п.

Для выяснения точной причины, добавь в начало скрипта строку Opt("TrayIconDebug",1), а также закомментируй AutoItSetOption("TrayIconHide", 1) и BlockInput ( 1 ). Запусти скрипт снова, и, когда он зависнет, наведи мышь на иконку AutoIt-а в трее и увидишь причину зависания.

Такой функции не нашел в описании. AutoIT 3.1.1Плохо искал: ControlClick ( "title", "text", controlID [, button] [, clicks]] ). При просмотре chm-ки, для более удобного поиска, переключайся на закладку "Указатель" и там вводи то, что ищешь. При этом работает автодополнение и ты быстро найдешь искомую функцию.

P.S. Извини за неоперативный ответ - я только вчера купил новую интернет-карточку.

EgOrus
30-08-2005, 17:13
Здравствуйте товарищи, радует что тема растет и множится.
Написал скрипт для автоматизации процесса скидывания CD и DVD дисков на HDD (мне нужно было скинуть большое количество фильмов).

Так вот вопрос такой, хотелось бы сделать прогрэсбар для наглядности, но каким образом обновлять его, что-то не представляю. Вернее есть решение, считывать объем инфы кот. уже скопировалась и сравнивать с общим объемом компакт диска, но это работает только в случае копирования мелких фалов, при копировании фильма индикатор с 1% будет прыгать на 100%. Есть ли какое-то решение?

; Скрипт полностью автоматизирует процесс копирования, от пользователя требуется
; только вставлять диски и задвигать лоток. Скипт написан для запуска из Total Commander,
; но можно использовать и самостоятельно.
; В верхнем левом углу выводит инф. о текущем действии скрипта.
; Пример запуска:
; cdcopy.exe [CD] [Destination]
; cdcopy.exe X: D:\Video или cdcopy X "D:\Video store"
; cdcopy.exe "%P" "%T" из TC
;-----------------------------------------------------------

Opt('ExpandVarStrings', 1)
Opt('TrayIconDebug',1)

;Назначение переменных из командной строки
$cmd1 = $CmdLine[1]
$cmd2 = $CmdLine[2]

;Приведение переменных к нужному виду
If StringLen($cmd1) = 1 Then $cmd1 = "$cmd1$:"
If StringLen($cmd2) = 1 Then $cmd2 = "$cmd2$:"
If StringLen($cmd1) > 2 Then $cmd1 = StringLeft("$cmd1$", 2)
If StringRight("$cmd2$", 1) = "\" Then $cmd2 = StringTrimRight("$cmd2$", 1)

;Завершение скрипта если нет параметров или первый параметр не явл. буквой CD(DVD)ROM'а
If $CmdLine[0] = 0 Then
MsgBox(4096,"CD-DVD Copy script", "No command-line arguments")
Exit
ElseIf DriveGetType("$cmd1$\") <> "CDROM" Then
MsgBox(4096,"CD-DVD Copy script", "$cmd1$ is not a CD(DVD)ROM drive letter")
Exit
EndIf

;Начало цикла
While 1
Sleep (1000)

;Если в приводе нет носителя, начинаем цикл сначала
If DriveStatus("$cmd1$\") == "NOTREADY" Then ContinueLoop
ToolTip(" CD mount.", 1, 1)
Sleep (500)

;Получаем объем своб.места на диске назначения и конвертируем его в gb. в случае если места больше 1024 mb.
$DestFree = DriveSpaceFree(StringLeft("$cmd2$", 2) & "\")
if $DestFree > 1024 Then
$DestFreeGB = round (($DestFree / 1024), 2)
$siz = "gb."
Else
$DestFreeGB = round ($DestFree, 2)
$siz = "mb."
EndIf

;получаем объем носителя в mb. (CD или DVD)
$SourceTotal = DriveSpaceTotal("$cmd1$\")
If $SourceTotal > 801 Then
$media = "DVD"
Else
$media = "CD"
EndIf

;получаем Метку диска
$CDlabel = DriveGetLabel("$cmd1$\")

;Завершение скрипта если недостаточно свободного места на диске назначения
ToolTip(" Check free space.", 1, 1)
Sleep (500)
ToolTip(" Free space: $DestFreeGB$ $siz$", 1, 1)
If $DestFree < $SourceTotal Then
MsgBox(4096,"CD-DVD Copy script", "Not enough free space on Drive " & StringLeft("$cmd2$", 2) & " " & round($DestFree, 2) & " mb. free")
Exit
EndIf
Sleep (1000)

;Создаем папку, куда затем будет скопирован диск
DirCreate("$cmd2$\!new\$CDlabel$")
ToolTip(" $media$ copy in progress :: $CDlabel$ :: [" & round($SourceTotal, 2) & " mb.]", 1, 1)
DirCopy("$cmd1$\", "$cmd2$\!new\$CDlabel$",1)
ToolTip(" $media$ copy complete", 1, 1)
Sleep (500)
SoundSetWaveVolume(50)
SoundPlay ( "C:\WINDOWS\Media\chimes.wav")
CDTray("$cmd1$", "open")
ToolTip(" Please mount Media in Drive $cmd1$", 1, 1)
Sleep (4000)

WEnd

demo369
30-08-2005, 18:24
demo369

Цитата:
Запускаю AutoIt3.exe lingvo.au3

В принципе, так тоже должно работать, т.к. я применял макрос @ScriptDir в путях, но я всегда использую откомпилированные в exe скрипты, а данный вариант запуска установки Lingvo не тестировал вовсе.

Сделал экзешник. Ситуация не поменялась ;)


Цитата:
Может где-нибудь в скрипте ошибка?

Пару десятков раз проверял на VMWare и 2 раза на реальных компах - все было ОК.
Почему скрипт может не работать:
1. Не выполнен пункт 4 оригинального поста - Alcohol или Daemon ни разу не запускались.

Пользуюсь Alcohol. Специально запускал. По идеи если его не запустить, то он и образ не должен примонтировать,а это он как раз делает.

2. Другой дистрибутив Lingvo и, следовательно, отличные от приведенных в скрипте названия окон, текст в окнах, названия эл-тов (ну не Button3, а Button2, например), другое имя msi-файла в корне исошки Lingvo и т.п.

LV10ML.iso - размер 650,170,368 байт
MSI файл как и в скрипте.
названия и кнопки такие же. смотрел через AutoIt Window Info и через IsoBuster.

Для выяснения точной причины, добавь в начало скрипта строку Opt("TrayIconDebug",1), а также закомментируй AutoItSetOption("TrayIconHide", 1) и BlockInput ( 1 ). Запусти скрипт снова, и, когда он зависнет, наведи мышь на иконку AutoIt-а в трее и увидишь причину зависания.

Просто выдает что скрипт остановлен (paused) lingvo.exe


Цитата:
Такой функции не нашел в описании. AutoIT 3.1.1

Плохо искал: ControlClick ( "title", "text", controlID [, button] [, clicks]] ). При просмотре chm-ки, для более удобного поиска, переключайся на закладку "Указатель" и там вводи то, что ищешь. При этом работает автодополнение и ты быстро найдешь искомую функцию.

Угу, нашел. Даже пробовал, добавить button и clicks. Рез-тов не дало.

P.S. Извини за неоперативный ответ - я только вчера купил новую интернет-карточку

Это не страшно ;) Спасибо что ответил.
Могу еще скриншот скинуть на окошко, на котором скрипт останавливается. Может что-нибудь прояснится.

Sanja Alone
01-09-2005, 03:21
demo369
Очень неудобно читать твои посты - pls, пользуйся тэгами цитат quote (http://forum.oszone.net/misc.php?do=bbcode#quote).

Просто выдает что скрипт остановлен (paused) lingvo.exeНе просто... Наведи мышку на иконку и не нажимай клавиш, появится всплывающая подсказка на 2 строки - в первой будет имя скрипта, а во второй строка на к-рой он застопорился (что-то вроде Line 5: WinWait("Name","Text")) Причем лучше запускать au3-файл, т.к. в случае с exe не будет показан номер строки скрипта.

Даже пробовал, добавить button и clicks. Рез-тов не дало.Все, что в квадратных скобках - необязательные параметры.

Что я могу еще придумать:
1. Можно заменить
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
; на
WinWait ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
WinActivate ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
WinWaitActive ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор' )
2. Заменить
ControlClick ( 'ABBYY Lingvo 10 Multilingual Dictionary', 'Лицензионный договор', 'Button3' )
Send ( '{ENTER}' )
; на
Send ( '{UP}' )
Send ( '{ENTER}' )
3. Мешать скрипту могут различные перехватывающие нажатия клавиш проги: автопереключатели раскладки, счетчики нажатий клавиш и т.п. Тут нужно или отказаться от BlockInput(1), или убивать процесс такого приложения в памяти, например, убийство Punto Switcher-а будет выглядеть так (поместить этот код нужно в начало скрипта):
If ProcessExists ( "ps.exe" )<>0 Then
ProcessClose ( "ps.exe" )
ProcessWaitClose ( "ps.exe" )
EndIf

Sanja Alone
01-09-2005, 04:37
EgOrus
Вернее есть решение, считывать объем инфы кот. уже скопировалась и сравнивать с общим объемом компакт дискаДва шага:
1. Перед началом копирования определять объем свободного места на целевом диске;
2. Разность (текущий объем свободного пространства - начальный) сравнивать с общим объемом компакта.
Данные на винт ведь не 700-метровыми кусками пишутся :)

EgOrus
01-09-2005, 07:29
Два шага:
1. Перед началом копирования определять объем свободного места на целевом диске;
2. Разность (текущий объем свободного пространства - начальный) сравнивать с общим объемом компакта. Данные на винт ведь не 700-метровыми кусками пишутся
Не вижу принципиального отличия от моей схемы :) в моем варианте происходило так:
1. рассчет занимаемого места целевой папки куда ложится фильм (для диска создается отдельная папка с меткой диска)
2. сравнения полученного значения с общим объемом компакта.
Но вся заковырка в том, что данные именно 700 метровыми кусками и пишутся. Может конечно что-то в системе нужно изменить, но у меня именно так и происходит, под фильм сразу резервируется все 700 метров в самомом начале копирования, т.е. в целевой папке создается 700метровый файл.
Есть еще один вариант, копировать через @comspec copy , возможно в этом случае копирование происходит без резервирования.

Sanja Alone
02-09-2005, 02:12
EgOrus
Есть еще один вариант, копировать через @comspec copyСтандартные средства тут не катят - copy как и xcopy резервируют пр-во перед началом копирования.
Тебе нужна xxcopy (http://www.xxcopy.com/download/xxcopy.zip) (244 527 байт) - эта вариация на тему xcopy имеет массу возможностей и копирует без предварительного резервирования места. Но потом не ругайся на обрубки файлов, если прервешь процесс :)

EgOrus
02-09-2005, 08:31
Sanja Alone
Да я знаю эту утилитку, но ни xxcopy ни robocopy меня не устраивают, лучше уж я пожертвую прогрессбаром, чем буду использовать сторонние утилитки. К моему удивлению на родном форуме (http://www.autoitscript.com/forum) также ничего по копированию больших файлов не придумали. Спасибо тебе за помощь.

Speed_Perm
02-09-2005, 15:34
Здравствуйте.

Обращаюсь за помощью. Слепил скриптик для автоматической установки программы на компьютер W2000 pro SP4 под правами опытного пользователя. Но инсталляция просит наличие прав администратора. Как бы проблема решаема с помощью RunAsSet ( ["user", "domain", "password"] . Инсталяционный пакет находится на сететвом ресурсе. Но возникает проблема:



run(‘\\Maim\install\setup.exe’)

Инсталяция запускается, но сообщает об необходимости прав администратора



а если

RunAsSet ( "Admin", @Computername, "password" )

run('\\Maim\install\setup.exe')

то выдает ошибку

Error: Unable to execute the external program.

Системе не удается найти указанный путь



если

RunAsSet ( "Admin@Computername, "password" )

run('D:\install\setup.exe')

то запускается



Подскажите причина такого глюка? Или я не правильно делаю?

biork
03-09-2005, 00:54
Всем привет!
В очередной раз прошу помощи у знающих и понимающих :-)
Совершенно ламерский вопрос. Как скопировать файл с CD диска на HDD в процессе выполнения скрипта?
Скрипт запускается из RunOnceEx.cmd. Оба файла, котырые нужно скопировать лежат в той же дирректории что и сам скрипт.
Вариант, приведённый ниже не срабатывает: папка создаётся, но файлы не копируются

DirCreate("D:\folder1\folder2")
FileCopy("setup.exe", "D:\folder1\folder2\*.*")
FileCopy("#readme.txt", "D:\folder1\folder2\*.*")

Однако, если запустить скрипт "вручную", непосредственно кликнув по нему, то всё ок - файлы копируются.
В чём косяк? (Все остальные команды из RunOnceEx.cmd, а так же сам скрипт, фрагмент которого приведён выше, выполняются нормально)

Sanja Alone
03-09-2005, 01:56
biork
FileCopy( @ScriptDir & '\setup.exe', 'D:\folder1\folder2\' )
FileCopy( @ScriptDir & '\#readme.txt', 'D:\folder1\folder2\')

Sanja Alone
03-09-2005, 03:01
Speed_Perm
run('\\Maim\install\setup.exe') то выдает ошибку Error: Unable to execute the external program.afair, Run не понимает сетеых путей. Попробуй сначала примапить ресурс \\Maim\install при помощи функции DriveMapAdd( "device", "remote share" [, flags [, "user" [, "password"]]] )(фактически, это местный net use). А уже потом запускай setup.exe через Run('X:\setup.exe')(где X - это и есть тот самый "device").

Sanja Alone
05-09-2005, 05:10
Добавил скрипт (http://sanjaalone.h15.ru/files/autoit-pragma.zip) для автоустановки переводчика Pragma 4.xx.xxxx.
Да, можете посмотреть на применение функции AdlibEnable() на примере этого скрипта. Все комментарии (как всегда) внутри скрипта.

bogomolv
06-09-2005, 09:39
Sanja Alone
Попробуй сначала примапить ресурс \\Maim\install при помощи функции DriveMapAdd
Недавно тоже обратил внимание на эту функцию. Понравилось, но, к сожалению, она НЕ работает под WinPE!
Там вообще с сетью постоянные заморочки. Как раз для простого и быстрого подключения из под WinPE ко второму компьютеру и пытался прикрутить эту функцию. Фиг-вам. Пришлось оставить скрипт, основанный на NET USE:
For $i=1 to 15
$err=RunWait('net use * \\note\c /user:Богомолов')
If $err=0 Then
MsgBox(0,'AutoIt3','Подключение установлено! ', 5)
Exit
Else
If MsgBox(5,'AutoIt3','Попытка подключения '&$i&'. Ждите... ', 10)=2 Then ExitLoop
EndIF
Next
MsgBox(16,'','Подключиться не удалось. Проверьте свою сеть! ', 10)




© OSzone.net 2001-2012