|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] AutoIt скрипты |
|
[Архив - Часть 1.3] AutoIt скрипты
|
Старожил Сообщения: 250 |
Профиль | Отправить PM | Цитировать
Внимание! Тема переведена в архивное состояние (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе 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 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Diamond
А функция не работает то - нужно Global $GetPath = 0 ставить вне функции, т.к каждый вызов подфункции, вне зависимости от того найден ли файл, задаёт переменной $GetPath значение 0, таким образом цикл не прирывается, и пока не проверяются все файлы функция действует... Вот немного изменил её (сорри если что), а также добавил в неё определение файла в корневом каталоге (в $Path): Global $GetPath=0 $ret = find(@ProgramFilesDir,"qip.exe") If Not $ret=0 Then MsgBox(0,"",$ret) ; Записываем значение $ret в реестр... Else MsgBox(0,"","Файл не найден.") EndIf ;================================= ; $Path - Путь поиска. ( Не должен заканчиваться слэшем!!! ) ; $FileName - Имя искомого файла. ; Возвращает полный путь к каталогу (не к файлу), если файл осутствует возвращает 0 Func find($Path,$FileName) $ModPath=$Path & "\*" ; Формирую строку поиска (толко для инициализации) $file=FileFindFirstFile($ModPath) ; Инициализация поиска While 1 ; Условие для прерывания всех циклов - чтобы быстро выйти из функции If $GetPath <> 0 Then ; Если нужный нам файл уже найден тогда ExitLoop ; Прерываю циклы всех подфункций EndIf $get=FileFindNextFile($file) ; Поиск... If @error Then ExitLoop $string=$Path & "\" & $get ; Формирую новый путь If Not StringInStr(FileGetAttrib($string),"D") Then ;Если не является папкой тогда: If $get=$FileName Then $GetPath=$Path ExitLoop EndIf Else find($string,$FileName) ; Запуск подфункции для поиска в подпапке EndIf WEnd FileClose($file) ;Завершение инициализации Return $GetPath EndFunc P.S. всё изменённое выделенно. |
------- Отправлено: 07:51, 23-01-2007 | #161 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Diamond
Немного “гуинизировал” твою функцию для поиска файла - в первом поле задаём путь в котором нужно искать, а в нижнем запрос (имя файла) - неверно набранный путь (если не существует или содержит слеш на конце) определяется, а также определяется если набранное имя файла содержит непозволенные символы (< > | ? : * / \ "): Opt("GuiOnEventMode", 1) Global $Progress = 0.1, $GetPath = 0 $PathForSearch = @ProgramFilesDir $FileToFind = "FileName.exe" $Gui = GUICreate("File Finder", 300, 170, -1, -1, -1, 0x00000088) GUISetOnEvent(-3, "ExitScript") GUICtrlCreateLabel("Path to search on:", 20, 30) $PathInput = GUICtrlCreateInput($PathForSearch, 20, 50, 270) GUICtrlCreateLabel("File to find:", 20, 90) $FileNameInput = GUICtrlCreateInput($FileToFind, 20, 110, 270) $SearchButton = GUICtrlCreateButton("Search", 70, 140, 60, 20) GUICtrlSetOnEvent(-1, "SearchButton") $CancelButton = GUICtrlCreateButton("Cancel", 180, 140, 60, 20) GUICtrlSetOnEvent(-1, "ExitScript") GUISetState() While 1 Sleep(100) WEnd Func _FindFile($Path, $FileName) $ModPath = $Path & "\*" ; Формирую строку поиска (толко для инициализации) $File = FileFindFirstFile($ModPath) ; Инициализация поиска While 1 ; Условие для прерывания всех циклов - чтобы быстро выйти из функции If $GetPath <> 0 Then ExitLoop ; Прерываю циклы всех подфункций $Get = FileFindNextFile($File) If @error Then ExitLoop $String = $Path & "\" & $Get ; Формирую новый путь ProgressSet($Progress, $Path & @CR & $Get) $Progress = $Progress + 0.1 If $Progress >= 100 Then $Progress = 0.1 If Not StringInStr(FileGetAttrib($String), "D") Then ;Если не является папкой тогда: If $Get = $FileName Then $GetPath = $Path ExitLoop EndIf Else _FindFile($String, $FileName) ; Запуск подфункции для поиска в подпапке EndIf WEnd FileClose($File) ;Завершение инициализации Return $GetPath EndFunc Func SearchButton() If Not FileExists(GUICtrlRead($PathInput)) Then _MsgBox(16, "Error", "You must type an existing path", $Gui) ElseIf StringRight(GUICtrlRead($PathInput), 1) = "\" Then _MsgBox(48, "Attention!", "The path must not have a slash (\) at the end of it.", $Gui) ElseIf GUICtrlRead($FileNameInput) = "" Then _MsgBox(16, "Error", "You must type a file name", $Gui) ElseIf Not _IsFileName(GUICtrlRead($FileNameInput)) Then _MsgBox(16, 'Error', 'The file name include an invalid characters' & @CR & '< > | ? : * / \ "', $Gui) Else $PathForSearch = GUICtrlRead($PathInput) $FileToFind = GUICtrlRead($FileNameInput) GUISetState(@SW_HIDE, $Gui) ProgressOn("Please wait...", "Search is in progress...", $PathForSearch, -1, -1, 16) $SearchResults = _FindFile($PathForSearch, $FileToFind) ProgressOff() If Not $SearchResults = 0 Then MsgBox(262144+64, "Done!", "File <" & $FileToFind & "> was found in this path <" & $SearchResults & ">.") Else MsgBox(262144+48, "Attention!", "File <" & $FileToFind & "> was not found on <" & $PathForSearch & "> and it subfolders." & @CR & @CR & "OK ---> EXIT") EndIf GUISetState(@SW_SHOW, $Gui) EndIf EndFunc Func _IsFileName($Test) If StringRegExp($Test, '[<>|?:"*/\\]') <> 0 Then Return False Else Return True EndIf EndFunc Func _MsgBox ($MsgBoxType, $MsgBoxTitle, $MsgBoxText, $mainGUI=0) $ret = DllCall ("user32.dll", "int", "MessageBox", _ "hwnd", $mainGUI, _ "str", $MsgBoxText , _ "str", $MsgBoxTitle, _ "int", $MsgBoxType) Return $ret [0] EndFunc Func ExitScript() Exit EndFunc |
------- Отправлено: 08:44, 23-01-2007 | #162 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Цитата:
Цитата:
Цитата:
А вот ExitLoop что ты добавил, никак не влияет на прерывание! |
||||
Отправлено: 09:30, 23-01-2007 | #163 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Diamond
Цитата:
|
|
------- Отправлено: 10:27, 23-01-2007 | #164 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Когда дочерняя подфункция находит файл, она завершаясь возвращает контроль родительской функции, которая в свою очередь (как я понял) продолжает работу с того места откуда последний раз запускала дочернюю подфукцию, а вот тут-то её будет поджидать твой ExitLoop. Исходя из всего выше сказаного, я думаю (моё) "условие для прерывания всех циклов" - абсолютно лишнее! Т.е. когда стоит твой ExitLoop, то до моего условия (прерывания), дело вообще не доходит!!! Уф-ф... В общем, я убираю его (условие)... |
|
Отправлено: 02:45, 24-01-2007 | #165 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Нашёл в аутоите баг (или это так задуманно?) - При BlockInput(1), вроде всё кроме Ctrl Alt Del должно быть заблокированно, но срабатывает нажатие и на Sleep и на Power.
Собственно вопрос: Возможно ли перед блокировкой, назначить другое действие для этих клавиш? (т.е чтобы при их нажатии ничего не происходило) - Очень очень нужно . P.S Задать клавишу Sleep можно, но она почему то продолжает работать (как Sleep) |
Последний раз редактировалось Creat0R, 24-01-2007 в 21:55. Отправлено: 17:36, 24-01-2007 | #166 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Давно искал способ сделать “плавающее окошко”, чтобы ещё при “плавании” , перемещалось хаотично по экрану. Когда ещё только начинал разбирать гуи в AutoIt'е, думал это не реально, и забросил эту затею, но вот тут ни с того ни с сего, я вдруг вспомнил об этом, и решил попробовать реализовать (всё же знании уже побольше), и, реализовал! (довольно без проблем, и быстро)...
Вот Пример: #include <GuiConstants.au3> Opt("GuiOnEventMode", 1) ;Создаём стильны гуи для показа ;-) GUICreate("Fading GUI", 200, 100, -1, -1, $WS_POPUP+$WS_DLGFRAME, $WS_EX_CLIENTEDGE+$WS_EX_TOPMOST) GUISetOnEvent(-3, "ExitScript") GUISetBkColor(0xC1C9FD) ;Активируем гуи в скрытом режиме, в целях избежания мерцания окна при первом запуске GUISetState(@SW_HIDE) ;Устанавливаем самый высокий уровень (0) прозрачности окна гуи WinSetTrans("Fading GUI", "", 0) ;Показываем обратно гуи в невидемом состоянии (100 % прозрачности) GUISetState(@SW_SHOW) $Close = GUICtrlCreateButton("Close", 70, 40, 60, 20) GUICtrlSetOnEvent(-1, "ExitScript") ;Включаем функцию утухания и перемещения окна каждые 100 м"с AdlibEnable("GUIFad", 100) While 1 Sleep(10) WEnd Func GUIFad() ;Задаём интервал исчезновения окна и проходимся по нему For $i = 0 To 255 Sleep(10) WinSetTrans("Fading GUI", "", $i) Next Sleep(50) ;Задаём интервал появления окна и проходимся по нему (в обратном порядке) For $j = 255 To 0 Step -1 Sleep(10) WinSetTrans("Fading GUI", "", $j) Next ;Двигаем окно в хаотичном порядке (хм, парадокс получается ;) ), в соответствии с координатами разрешения экрана WinMove("Fading GUI", "", Random(0, @DesktopWidth-200), Random(0, @DesktopHeight-200)) EndFunc Func ExitScript() Exit EndFunc |
------- Отправлено: 21:47, 24-01-2007 | #167 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Оказывается, можно вызвать MsgBox не в стильном виде (не испоьзуя стиль WinXP) - т.е сообщение будет выглядеть как системное в Win98...
Нужно просто перед основным флагом, ставить стиль 0x20000: Я вот только не знаю как убрать атрибут “поверх всех окон”, перепробовал кучу номеров, но так и не нашёл подходящий. |
------- Последний раз редактировалось Creat0R, 26-01-2007 в 06:17. Отправлено: 03:48, 26-01-2007 | #168 |
Пользователь Сообщения: 134
|
Профиль | Отправить PM | Цитировать Привет всем!!!
Помогите пожалуйста с скриптом для установкой Fraps и Runpad Shell. Для тихой установки уже наверное все ключики перепробЫвал, но не помогает, всеравно вылазиет табличка с уведомлением установить программу. |
Отправлено: 01:32, 27-01-2007 | #169 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать borzoy
Цитата:
А вообще, нужно было создавать отдельный топик: Цитата:
|
||
------- Отправлено: 10:28, 27-01-2007 | #170 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 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 |
|