|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] AutoIt скрипты |
|
[Архив - Часть 1.3] AutoIt скрипты
|
Старожил Сообщения: 250 |
Внимание! Тема переведена в архивное состояние (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе 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
Цитата:
Цитата:
gregaz Цитата:
![]() Цитата:
Цитата:
Цитата:
Цитата:
![]() Цитата:
Цитата:
![]() |
|||||||||
------- Отправлено: 00:51, 08-06-2007 | #491 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
|
|
Отправлено: 06:17, 08-06-2007 | #492 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
![]() http://www.thefreecountry.com/utilit...kedfiles.shtml http://www.microsoft.com/technet/sys...on/Handle.mspx З.Ы. Поясню свою позицию. Дело в том, что в Windows нет документированных API-функций по перечислению открытых хэндлов, все подобные утилиты используют недокументированные вызовы функций ядра что не есть хорошо для обычного приложения, в частности могут возникать утечки памяти... При вызове внешних приложений таких проблем не возникает, так как при закрытии процесса система подчищает за ним все "хвосты". Лопата здесь лежит: http://forum.sysinternals.com/forum_...ID=3577&a%20mp. ![]() |
|
Отправлено: 07:16, 08-06-2007 | #493 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Помнится, мы мучали функцию _PathSplitByRegExp()... Так вот оказалось, что RegExp-аналог оригинальной функции _PathSplit() занимает всего одну строчку... ![]() |
Последний раз редактировалось amel27, 09-06-2007 в 05:35. Отправлено: 08:21, 08-06-2007 | #494 |
![]() Пользователь Сообщения: 88
|
Профиль | Отправить PM | Цитировать Creat0R !
Спасибо за пример и разьяснения ! Все встает на свои места. Еще пару вопросов,если можно : 1.На вопрос: Можно ли вместо вывода информации в окне MsgBox осуществлять вывод в том же окне GUI ? был дан ответ : Можно, нужно строить также новый ГУИ . А разве нельзя в этом же GUI вот так(тот же пример) : ? Вроде работает. Global $Input1, $Input2, $ReadButton=-1, $SaveButton=-1 $Gui = GUICreate("Demo GUI", 400, 300) $Label1 = GUICtrlCreateLabel("Строка 1", 20, 50, 300,40) $Label2 = GUICtrlCreateLabel("Строка 2", 20, 100, 300,40) $Button1 = GUICtrlCreateButton("Button1", 100, 260, 70) $Button2 = GUICtrlCreateButton("Button2", 250, 260, 70) GUISetState() While 1 Switch GUIGetMsg() Case -3 Exit Case $Button1 ;нажата кнопка "Button1" ;Нажата кнопка "Button1", а значит стираем инфу и вместо неё пишем другую ;(можно конечно удалять контроли и создавать новые, но не вижу в этом смысла ;) )... GUICtrlSetData($Label1, "Новая строка 1") GUICtrlSetData($Label2, "Новая строка 2") ;Создаём поля ввода $Input1 = GUICtrlCreateInput("Поле ввода 1", 20, 140, 300) $Input2 = GUICtrlCreateInput("Поле ввода 2", 20, 180, 300) ;Создаём кнопки Read-Save $ReadButton = GUICtrlCreateButton("Read", 100, 220, 70) $SaveButton = GUICtrlCreateButton("Save", 250, 220, 70) Case $Button2 ;нажата кнопка "Button2" ;Удаляем всё кроме кнопок "Button1" и "Button2" GUICtrlDelete($Label1) GUICtrlDelete($Label2) GUICtrlDelete($Input1) GUICtrlDelete($Input2) GUICtrlDelete($ReadButton) GUICtrlDelete($SaveButton) Case $ReadButton ;нажата кнопка "Read" ;Выводим тот текст что создали (я так понял это нужно?) GUICtrlSetData($Label1, "Поле ввода 1" & @LF & "Поле ввода 2") ; MsgBox(64, "Info", "Поле ввода 1" & @LF & "Поле ввода 2") Case $SaveButton ;нажата кнопка "Save" ;Выводим то что в полях ввода $ReadInput1 = GUICtrlRead($Input1) $ReadInput2 = GUICtrlRead($Input2) GUICtrlSetData($Label2, $ReadInput1 & @LF & $ReadInput2) ; MsgBox(64, "Info", $ReadInput1 & @LF & $ReadInput2) EndSwitch WEnd 2. Просьба привести любой простой пример выполнения опросов состояний элементов GUI в разных циклах Может быть даже в том же примере провести опрос состояний кнопок "Read" и "Save"в отдельном цикле ? 3. Что означает Case -3 (GUIGetMsg()= -3 )? Какой-то идентификатор завершения процессов ??? |
Отправлено: 17:46, 08-06-2007 | #495 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
$Dict=ObjCreate("Scripting.Dictionary") Dim $var[4] $var[0]="test1 -->" & @CRLF & "<-- возврат каретки и перенос строки" $var[1]="test2" & @CRLF $var[2]=@CRLF & "test3" & @CRLF $var[3]=@CRLF & @CRLF & @LF & @LF & @CR & @CR ;~ Добавление ключей: For $o In $var $Dict.Add($o,"") Next ;~ Проверка добавленных ключей: For $o In $var If $Dict.Exists($o) Then ;~ OK! Else ;~ ... EndIf Next ;~ У меня не вылетает ;~ Проверка несуществующего ключа MsgBox(0,"Должен быть: 0",$Dict.Exists("test5")) ;~ Проверка массива: $arrayKey=$Dict.Keys For $i=0 To $Dict.Count-1 MsgBox(0,"Перебор массива...",$arrayKey[$i]) Next ;~ Всё на своём месте. Похожая ошибка возникает при попытке добавить в словарь ключ (Кеу) который там уже существует. (Словарь - изначально не поддерживает дубликаты) |
|
Отправлено: 20:12, 08-06-2007 | #496 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата:
Утилита из того топика, вызвращает хэндлы TCP/UDP (правда не совсем понимаю что это), для обычных файлов информации нет ![]() Взял утилиту из второго линка, она возвращает то что нужно, но 400 с лишним кб, это тяжко, даже очень тяжко ![]() |
|
------- Отправлено: 23:06, 08-06-2007 | #497 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата:
Но вообще то, я делал функцию _PathSplitByRegExp() не как аналог функции _PathSplit(), а как что то более юзабельное и функциональнее, можно сказать что это как бы “мод” той функции ![]() gregaz Цитата:
#include <GuiConstants.au3> $Gui = GUICreate("Demo GUI", 400, 300) $Button1 = GUICtrlCreateButton("Button1", 100, 260, 70) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $Button1 ;нажата кнопка "Button1" $Ret = _GuiMsgBox($WS_EX_TOPMOST, 2, "Info", "Текст 1" & @LF & "Текст 2", 330, 120, _ "Больше не показывать", "OK", "Отмена", $Gui) MsgBox(0, "", "Вернувшееся значение: " & $Ret) EndSwitch WEnd ;Функция для показа самодельного окна MsgBox Func _GuiMsgBox($Type, $ButtonsNumber, $Title, $Text, $Left, $Top, $CheckBoxText, $FirstButtonText="OK", $SecondButtonText="Cancel", $hWnd=0) Local $Yes, $No, $OK, $CheckBox=-1, $Gui, $Msg, $ReturnVal = 0 If $hWnd <> 0 Then WinSetState($hWnd, "", @SW_DISABLE) $Gui = GuiCreate($Title, $Left, $Top, -1, -1, -1, $Type, $hWnd) GUICtrlCreateLabel($Text, ($Left-($Left-($Left/2/2)))/2, (($Top/2)/2)-10, $Left-($Left/2/2), 40, $SS_CENTER) Select Case $ButtonsNumber = 2 $Yes = GUICtrlCreateButton($FirstButtonText, ($Left/2)-90, ($Top/2), 70, 20) $No = GUICtrlCreateButton($SecondButtonText, ($Left/2)+20, ($Top/2), 70, 20) Case $ButtonsNumber > 2 Or $ButtonsNumber <= 1 $OK = GUICtrlCreateButton($FirstButtonText, ($Left-70)/2, $Top/2, 70, 20) EndSelect If $CheckBoxText <> "" Then $CheckBox = GUICtrlCreateCheckbox($CheckBoxText, 15, $Top-30) GuiSetState(@SW_SHOW, $Gui) While 1 $Msg = GUIGetMsg() Select Case $ButtonsNumber = 2 And $Msg = $Yes If GUICtrlRead($CheckBox) = 1 Then $ReturnVal = 6+8 Else $ReturnVal = 6 EndIf ExitLoop Case $ButtonsNumber = 2 And $Msg = $No If GUICtrlRead($CheckBox) = 1 Then $ReturnVal = 7+8 Else $ReturnVal = 7 EndIf ExitLoop Case ($ButtonsNumber = 1 Or $ButtonsNumber <> 2) And $Msg = $OK If GUICtrlRead($CheckBox) = 1 Then $ReturnVal = 1+8 Else $ReturnVal = 1 EndIf Case $Msg = -3 ExitLoop EndSelect Wend If $hWnd <> 0 Then WinSetState($hWnd, "", @SW_ENABLE) GUIDelete($Gui) Return $ReturnVal EndFunc Цитата:
Цитата:
Diamond Цитата:
Цитата:
![]() P.S Но я всё же больше доверяю массивам ![]() |
||||||
------- Отправлено: 00:03, 09-06-2007 | #498 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
![]() Кстати, насчет твоего старого вопроса о массовой замене и функции _StringRexExpReplaceEx… зачем там RegExp? Имхо вариант с обычным StringReplace справится лучше, плюсы очевидны: - работает быстрее; - нет проблем с форматными символами (речь о "|"); - если элементу из массива $Pattern нет соответствия в $Replace автоматически предполагается пустая строка. $String = 'file://localhost/%22c:/my%20test/test.zip%22' Dim $Pattern [4] = ['/','%20','%22','file:\\localhost\'] Dim $Replace[3] = ['\',' ','"'] Func _StringReplaceEx ($String, $Pattern, $Replace) Local $i ReDim $Replace[UBound($Pattern)] For $i=0 To UBound($Pattern)-1 ConsoleWrite ($Pattern[$i]&':'&$Replace[$i]&@CRLF) $String = StringReplace ($String, $Pattern[$i], $Replace[$i]) Next Return $String EndFunc MsgBox (64, "Results", _StringReplaceEx ($String, $Pattern, $Replace)) ;На выходе имеем это: "c:\my test\test.zip" |
|
Отправлено: 06:28, 09-06-2007 | #499 |
![]() Пользователь Сообщения: 88
|
Профиль | Отправить PM | Цитировать Creat0R
функция _GuiMsgBox достаточно громоздкая видимо из-за своей универсальности(на все случаи жизни) Попробую разобраться в ней. А пока 1 вопрос : При закрытии дочернего окна GUI у меня обычно закрывается и родительсое окно. У тебя же в примере этого не происходит . Чем это достигнуто ? |
Отправлено: 09:26, 09-06-2007 | #500 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 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 |
|