Показать полную графическую версию : [Архив - Часть 1.1] AutoIt скрипты
Страниц :
1
2
[
3]
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Madcap, спасибо за совет, но это я пробовал и хелп прочитал...
Вся проблема в том, при такой замене пути установки:
WinWaitActive ( '', 'Выбор директории установки...' )
ControlSetText ( '', 'Выбор директории установки...', 'Edit2', '@ProgramFilesDir\Software\' )
вылезает окно:
Директория @ProgramFilesDir\Software не может быть создана. Укажите другой путь.
Работает только с полным заданием пути.:(
godoo
Сегодны экспериментировал с тоталом, получилось вот так:
;Ввод пути установки проги
ControlSend ( "Installation Total Commander 6.0", "", "Edit1", @ProgramFilesDir & "\totalcmd")
пример скрипта
скрипт сравнивается с часами другого компьютера и каждые два часа качает фаил в заведомо созданую папку. как можно грамотно урезать , а то через чур большой
Opt('TrayIconHide', 0)
;Установка эталоного времени
#include <Process.au3>
$rc = _RunDos("net use \\comp (file:///comp) /user:user password")
$rc = _RunDos("net time \\comp (file:///comp) /set /yes")
TrayTip("Time", "Установка эталоного времени", 1, 1)
Sleep(1000)
TrayTip("clears any tray tip","",0)
;Скачка прайс листа
InetGet("http://www.name.ru/files.rar", "c:\files\files.rar", 1, 1)
While @InetGetActive
TrayTip("Price", "Обновление прайса", 5, 1)
Sleep(250)
Wend
Opt('TrayIconHide', 1)
Sleep(7200000)
Opt('TrayIconHide', 0)
;Скачка прайс листа
InetGet("http://www.name.ru/files.rar", "c:\files\files.rar", 1, 1)
While @InetGetActive
TrayTip("Price", "Обновление прайса", 5, 1)
Sleep(250)
Wend
Opt('TrayIconHide', 1)
Sleep(7200000)
Opt('TrayIconHide', 0)
;Установка эталоного времени
#include <Process.au3>
$rc = _RunDos("net use \\comp (file://comp/) /user:user password")
$rc = _RunDos("net time \\comp (file:///comp) /set /yes")
TrayTip("Time", "Установка эталоного времени", 2, 1)
Sleep(1000)
TrayTip("clears any tray tip","",0)
;Скачка прайс листа
InetGet("http://www.name.ru/files.rar", "c:\files\files.rar", 1, 1)
While @InetGetActive
TrayTip("Price", "Обновление прайса", 5, 1)
Sleep(250)
Wend
Opt('TrayIconHide', 1)
Sleep(7200000)
Opt('TrayIconHide', 0)
;Скачка прайс листа
InetGet("http://www.name.ru/files.rar", "c:\files\files.rar", 1, 1)
While @InetGetActive
TrayTip("Price", "Обновление прайса", 5, 1)
Sleep(250)
Wend
;завершение скрипта
Exit
Madcap, при таком способе перед тем путем, который стоит появляется вот это:
:\Ё ЁЁЁ Ё\Ё Ё ЁЁ ЁЁ\
На счет удаления предыдущего пути - можно послать в это окно кучу {DEL}ов.
На счет :\Ё ЁЁЁ Ё\Ё Ё ЁЁ ЁЁ\ незнаю.
2 all
Скажите, плс, есть ли в этой проге какой нибудь аналог команды GO TO ?
Sanja Alone
09-07-2005, 07:23
Madcap
В хелпе написано такое (FAQ - 4. Where is the "goto" command?):
Just to get you started, the most basic use of Goto in version 2.64 was an infinite loop like:
:mylabel
...do something...
...and something else...
goto, mylabelA simple v3 version of that is a While loop that is always "true".
While 1 = 1
...do something...
...do something else...
WendIf there is a massive outcry about this after the launch of v3 then I may add it back in, but only to help people convert scripts.
Короче говоря, что-то подобное есть, а если goto требуется не в бесконечном цикле, то нужно (imho) использовать маркерную переменную как-то вот так:
$your_variable = "исходное значение"
;
;какой-то код, к-рый может повлиять на $your_variable
;
While $your_variable = "исходное значение"
...do something...
...do something else...
WendА еще посмотри в сторону Select...Case...EndSelect
Sanja Alone
09-07-2005, 08:09
godoo
WinWaitActive ( '', 'Выбор директории установки...' )
ControlSetText ( '', 'Выбор директории установки...', 'Edit2', '@ProgramFilesDir\Software\' )
Ты все правильно в хелпе прочитал, но недочитал... Макросы (@ProgramFilesDir и т.п.) не берутся в кавычки, а объединяются со строками с пом. оператора объединения строк - &
Т.о., приведи код к такому виду:
WinWaitActive ( '', 'Выбор директории установки...' )
ControlSetText ( '', 'Выбор директории установки...', 'Edit2', @ProgramFilesDir & '\Software' )и все будет ОК.
И еще один момент: ты используешь директиву ControlSetText, и, следовательно, никаких del-ов посылать не нужно, т.к. в этом случае значение элемента Edit2 будет перезаписано новым и тебе не нужно беспокоиться о его начальном значении)
Sanja Alone
10-07-2005, 01:07
ched3n
Красивее будет сделать так:
1. Заменяешь #include и _RunDos на RunWait(@ComSpec & ' /C твоя_команда', '', @SW_HIDE);
2. Приводишь скрипт к виду:
;устанавливаем выход из скрипта по хоткею (в данном сл. это Ctrl+Alt+Z; выбор за тобой)
HotKeySet("^!z", "my_exit")
;запускаем основной бесконечный цикл
While 1 = 1
Opt('TrayIconHide', 0)
time_sync()
dl_price()
Opt('TrayIconHide', 1)
Sleep(7200000)
Wend
;функция синхронизации времени
Func time_sync()
RunWait(@ComSpec & ' /C net use file:///comp /user:user password', '', @SW_HIDE)
RunWait(@ComSpec & ' /C net time file:///comp /set /yes', '', @SW_HIDE)
TrayTip("Time", "Установка эталоного времени", 1, 1)
Sleep(1000)
TrayTip("clears any tray tip","",0)
EndFunc
;функция закачки прайса
Func dl_price()
InetGet("http://www.name.ru/files.rar", "c:\files\files.rar", 1, 1)
While @InetGetActive
TrayTip("Price", "Обновление прайса", 5, 1)
Sleep(250)
Wend
EndFunc
;функция завершения скрипта
Func my_exit()
Exit
EndFuncЕс-но, можно бесконечный цикл заменить на конечный (используя переменную-счетчик или какое-то условие), дополнить функции закачки и синхронизации времени проверками (удаленный комп ведь может быть и недоступен). Но это уже будет украшательством. Захочешь - сделаешь. А приведенный выше скрипт будет выполняться бесконечно (до нажатия хоткея) независимо от доступности удаленной машины (функции пользователя по ум. всегда возвращают 0, ес-но, если это не переопределить с пом. директивы Return.
P.S. Синтаксис команд net use/time я оставлю на твоей совести, но на правильный он непохож; к тому-же, net use к синхронизации времени не имеет никакого отношения.
спасибо за помощь
net use \\comp /user:user password авторизируется на удаленном компьютере
net time \\comp /set /yes синхронизирует время локального компьютера с удаленным
Sanja Alone
Большое спасибо.
Ребята, все получилось!!!
ОГРОМНОЕ ВАМ СПАСИБО!!!
Мой первый скрипт!
Установка FAR Manager, можете меня поздравить. И не говорите, что Фар можно как то проще поставить. Если просто разархивировать его в соответствующию директорию получится, во-первых, отсутствие ярлыков, во-вторых, в путях его системных не будет... В общем этот вариант самый оптимальный.
Вот текст:
BlockInput(1)
Run("Far1705.exe")
WinWait("FAR version 1.70 beta 5","",0)
Sleep(1000)
Send("{TAB}")
Send("{ENTER}")
WinWait("The FAR manager SETUP","&Folder to install FAR",0)
Send("{ENTER}")
WinWait("The FAR manager SETUP","Done",0)
Send("{ENTER}")
WinClose("FAR manager")
BlockInput(0)
Sanja Alone
13-07-2005, 02:37
Izvr
во-первых, отсутствие ярлыков
Я этот вопрос решил просто - у меня Far со всеми плагинами ставится из rarsfx-архива. Т.о., можно создавать стандартные ярлыки и запускать до/после извлечения команду/файл на выполнение (в данном сл. - импорт настроек в реестр regedit /S settings.reg, где settings.reg=FarSave1.reg+FarSave2.reg).
во-вторых, в путях его системных не будет...
Это ты о чем? ВСЕ свои настройки Far хранит в реестре. Файлы SaveSettings.bat и RestoreSettings.bat в каталоге Far-а ты видел? Эти файлики сохраняют и восстанвливают настройки Far-а (в/из файлы/файлов FarSave1.reg и FarSave2.reg). А в системную переменную Path Фар себя вообще не пишет, да и новых переменных не создает.
Теперь по сути.
В скриптах, вместо WinWait лучше использовать WinWaitActive или связку WinWait + WinActivate. Во-первых, это избавляет от необходимости угадывания времени Sleep-а, и, во-вторых, позволяет избежать проблем с последующим несвоевременным нажатием клавиш.
И еще одно замечание: не нужно в функциях ожидания окон задавать нулевые таймауты. Смысл таймаута такой - ждать X окно не более Y секунд и в любом сл. идти дальше. При таймауте=0 будет сделана одна проверка на наличие искомого окна и сразу будет выполнена следующая функция, что также может вызвать проблемы, т.к. посылаемая комбинация клавиш передастся не в активный элемент окна, а х.з. куда (по ум. пауза для оконных операций у AutoIt составляет всего 250 мс). Для окон установщика Фара этого с головой хватает, но ведь может попасться приложение и с загаженными всяким мусором, медленно появляющимися окнами.
Установка Far-а:
AutoItSetOption("TrayIconHide", 1)
BlockInput ( 1 )
Run ( 'Far1705.exe' )
WinWaitActive ( 'FAR version' )
ControlClick ( 'FAR version', '', 'Button2' )
WinWaitActive ( 'The FAR manager SETUP', '&Folder to install FAR' )
;поставить галку "Associate FAR with RAR, ARJ, LZH, ZIP, HA, CAB and TGZ"
ControlClick ( 'The FAR manager SETUP', '&Folder to install FAR', 'Button4' )
;начать установку
ControlClick ( 'The FAR manager SETUP', '&Folder to install FAR', 'Button8' )
WinWaitActive ( 'The FAR manager SETUP', 'Installation completed' )
Send ( '{ENTER}' )
;перенос ярлыков в более удобное место
DirCopy ( @ProgramsCommonDir & '\FAR manager', @ProgramsCommonDir & '\Файл-менеджеры\FAR manager', 1 )
DirRemove ( @ProgramsCommonDir & '\FAR manager', 1 )
BlockInput ( 0 )
Sanja Alone
Это ты о чем? ВСЕ свои настройки Far хранит в реестре. Файлы SaveSettings.bat и RestoreSettings.bat в каталоге Far-а ты видел? Эти файлики сохраняют и восстанвливают настройки Far-а (в/из файлы/файлов FarSave1.reg и FarSave2.reg). А в системную переменную Path Фар себя вообще не пишет, да и новых переменных не создает.
Ну а как тогда объяснить то, что я могу набрать в Run far и он у меня откроется? Я, конечно, допускаю возможность положить одноименный ярлык куда-нибудь в C:\windows, но мы не знаем всего того, что вшили разработчики в свой installer(так как они его к примеру залочили), так что SFX как то не очень надежно получается...
В скриптах, вместо WinWait лучше использовать WinWaitActive или связку WinWait + WinActivate. Во-первых, это избавляет от необходимости угадывания времени Sleep-а, и, во-вторых, позволяет избежать проблем с последующим несвоевременным нажатием клавиш.
Спасибо, учту...
И еще одно замечание: не нужно в функциях ожидания окон задавать нулевые таймауты. Смысл таймаута такой - ждать X окно не более Y секунд и в любом сл. идти дальше. При таймауте=0 будет сделана одна проверка на наличие искомого окна и сразу будет выполнена следующая функция, что также может вызвать проблемы, т.к. посылаемая комбинация клавиш передастся не в активный элемент окна, а х.з. куда (по ум. пауза для оконных операций у AutoIt составляет всего 250 мс). Для окон установщика Фара этого с головой хватает, но ведь может попасться приложение и с загаженными всяким мусором, медленно появляющимися окнами.
а "0" по моему бесконечность означает!? так что это вполне оправдано, но может быть я и не прав...
Sanja Alone
14-07-2005, 02:45
Izvr
Ну а как тогда объяснить то, что я могу набрать в Run far и он у меня откроется?
Да уж, давно я дедовским способом Far не ставил... Сейчас проверил на вирт. машине - действительно он добавляет свой путь в Path. Мне только не ясно одно - зачем? Ведь если запустить Фар из Run-а, то на него без боли смотреть просто невозможно и все юзеры (любящие комформ) запускают Фар с пом. ярлыка, к-рый редактируют "под себя". Но если ты экстремал, то можешь добавлять путь Far-а к Path-у с пом. включения в архив маленькой утилки setenv.exe (ftp://barnyard.syr.edu/pub/vefatica/setenv.exe) (35 328 байт) и батника примерно такого содержания:
@echo off
copy /y Far.lnk "%AllUsersProfile%\Application Data\Microsoft\Internet Explorer\Quick Launch\Far.lnk" > nul
regedit /S settings.reg
setenv -m PATH %PATH%;"%ProgramFiles%\Far"
exit(Far.lnk - "настроенный" ярлык, к-рый также нужно положить в архив).
У меня из подобного файлика (ес-но, без setenv) еще и шрифт в Винду добавляется для понимания Фаром укр. буковок.
И пусть тебя не беспокоят "лишние" файлы в каталоге установленного Фара. Если Фар придется когда-нибудь удалять (в сязи с острым приступом тоталкоммандеризма или еще чего-то пострашнее) то заставить Фар удалить и эти файлы можно просто дописав их имена в файл Uninstall.lst в каталоге Фара.
а "0" по моему бесконечность означает!?
Бесконечность означает отсутствие данного параметра, а 0 означает именно то, что я написал выше.
Sanja Alone
Ты неправ, 0 означает бесконечность.
Попробуй запусти 2 нехитрых скрипта:
WinWait ("Название окна","Текст", 1)
Sleep (300)
MsgBox ( 0, "12345", "12345")
и
WinWait ("Название окна","Текст", 0)
Sleep (300)
MsgBox ( 0, "12345", "12345")
Да уж, давно я дедовским способом Far не ставил... Сейчас проверил на вирт. машине - действительно он добавляет свой путь в Path. Мне только не ясно одно - зачем? Ведь если запустить Фар из Run-а, то на него без боли смотреть просто невозможно и все юзеры (любящие комформ) запускают Фар с пом. ярлыка, к-рый редактируют "под себя". Но если ты экстремал, то можешь добавлять путь Far-а к Path-у с пом. включения в архив маленькой утилки setenv.exe (35 328 байт) и батника примерно такого содержания:
Я создаю решение не для себя, а для работы. Так что мне пофиг, кому надо настроят. А вообще я пользуюсь консолькой, поэтому набрать far для меня проще, чем тыкаться в ярлык. За утилитку спасибо.
Sanja Alone
15-07-2005, 01:36
Madcap
Да, так и есть: WinWait ("Название окна","Текст", 0) дает такой же результат, как и WinWait ("Название окна","Текст"). Ну что тут сказать - такие выкрутасы должны быть описаны в справке. А там только сказано, что это "Timeout in seconds" и никаких ремарок (Remarks - None). Камень в огород писателей :) справки к AutoIt.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.