Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] AutoIt скрипты

Закрытая тема
Настройки темы
[Архив - Часть 1.3] AutoIt скрипты

Старожил


Сообщения: 250
Благодарности: 16

Профиль | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 25-01-2008
Внимание!
Тема переведена в архивное состояние





(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе 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

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Я как то сообщил на офф. форуме о серъёзном баге, наверняка многие из вас его заметили, его трудно не заметить...

Разработчики приписали моему репорту NOBUG (не бага), хотя я не согласен .

Баг заключается в следующем - 1) В момент перетаскивания окна ГУИ скрипта по его заголовку, 2) в момент изменения размера ГУИ окна, 3) при зажатии одной из кнопок закрытия/Сворачивания/Разворачивания окна, 4) а также и при открытии любых меню гуи (как главных так и контекстных), и в добавок, 5) при открытии меню из иконки в левом верхнем углу (значок программы) - Скрпит полностью останавливается на время указанных действии.

Мне кажется что это не должно происходить, разработчики свернули вину на Windows, мол это баг самой ОС, хотя не смотря на это, некоторые программы (и кстати, написанные тоже на C++) умудряются "не останавливать" свою работу на момент перетаскивания их окна или любой другой указанной ранее “дейтяльности” со стороны юзера.

Вобщем я решил эту задачку (надеюсь временно, желательно увидеть решение этой проблеме со стороны разработчиков) вот таким образом:

Код: Выделить весь код
#include <GuiDragable.au3>
#include <Guiconstants.au3>

Dim $LeftPos

$GuihWnd = _GuiDragableCreate("Drag GUI Demo", 300, 150, -1, -1)
GUISetBkColor(0xffffff)

$ExampleLabel = GUICtrlCreateLabel("Drag Me (but not by controls) ;)", 0, 60, 250, 20)
GUICtrlSetFont(-1, 12, 600, 0, "Tahoma")
GUICtrlSetColor(-1, 0xDD0000)

AdlibEnable("Example", 50)

DllCall("User32.dll", "long", "AnimateWindow", "hwnd", $GuihWnd, "long", 300, "long", 0x10)
GUISetState()

While 1
    Sleep(10)
WEnd

Func Example()
    $LeftPos += 3
    GUICtrlSetPos($ExampleLabel, $LeftPos, 60)
    If $LeftPos >= 300 Then $LeftPos = -250
EndFunc
Нужно в папке со скриптом иметь этот файл - http://www.autoitscript.com/forum/in...=post&id=14661

При перетаскивании окна (при зажатии мышки в любом места окна за исключением контролов, ведь мы же хотим иметь возможность нажимать на кнопки и т.п.), бегущая строка по прежнему "продолжает бежать" - это свидетильствует о том что скрипт не остановлен.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 06:42, 19-05-2007 | #411



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Метод позволяющий запускать код VBS не создавая временных файлов:


Код: Выделить весь код
$ProcessName = "AutoIt3.exe"

$RetArr = _ProcessExistsVbs($ProcessName)

If IsArray($RetArr) Then MsgBox(64, "", "Process <" & $RetArr[1] & "> exists." & @LF & @LF & _
    "The returned PID is: " & $RetArr[2] & @LF & @LF & _
    "Returned Executable Path is: " & @LF & $RetArr[3] & @LF & @LF & _
    "Command Line of executed process is: " & @LF & $RetArr[4])

;Функция возвращает массив содержащий имя процесса, его уникальный идентификатор (PID), путь запуска, и коммандную строку запуска.
;В случае если указанный процесс не существует, возвращается 0.
Func _ProcessExistsVbs($ProcName)
    Local $Code = ""
    $Code &= 'Function ProcessExists(ProcessName)' & @LF
    $Code &= '  Set Processes = GetObject("winmgmts://localhost")' & @LF
    $Code &= '  Set myProcEnum = Processes.ExecQuery("select * from Win32_Process")' & @LF
    $Code &= '  For Each Proc In myProcEnum' & @LF
    $Code &= '      If StrComp(Proc.Name, ProcessName, 1) = 0 Or StrComp(Proc.ProcessID, ProcessName, 1) = 0 Then' & @LF
    $Code &= '          Dim RetArr' & @LF
    $Code &= '          RetArr = Array(4, Proc.Name, Proc.ProcessID, Proc.ExecutablePath, Proc.CommandLine)' & @LF
    $Code &= '          ProcessExists = RetArr' & @LF
    $Code &= '          Exit Function' & @LF
    $Code &= '      End If' & @LF
    $Code &= '  Next' & @LF
    $Code &= '  ProcessExists = 0' & @LF
    $Code &= 'End Function'

    Local $VbsObj = ObjCreate("ScriptControl")
    If @error Then Return SetError(1, 0, -1)

    $VbsObj.Language = "vbscript"
    $VbsObj.AddCode($Code)
    Local $RetArr = $VbsObj.Run("ProcessExists", $ProcName)
    If $RetArr = 0 Then Return SetError(0, 0, 0)
    Return $RetArr
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:00, 21-05-2007 | #412


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
как то сообщил на офф. форуме о серъёзном баге
Думаю проблема в AdLib, так как это чисто AutoIT-овский планировщик и он отключается на время передачи управления системному коду (через DLLCall), поэтому ИМХО нужно либо избегать таких вызовов, либо использовать модель GUIRegisterMsg, которая поддерживается самой системой... правда в этом случае прорисовку придется выполнять в основном цикле, а обработку нажатий наоборот в процедуре.

Цитата:
Метод позволяющий запускать код VBS не создавая временных файлов:
Весьма забавный трюк, только какая в нем польза, если возможности AutoIT на порядок шире VBS?.. Шутка.

Отправлено: 12:44, 22-05-2007 | #413


Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


Creat0R
Отлично! Очень интересный способ! :UP:
Даже не подозревал что существует такой объект...
Я выяснил что "MSScriptControl.ScriptControl" предназначен также и для JavaScript'ов. VbScript'ы у меня запускаются а вот с JavaScript'ами почему-то ничего не выходит.
Привожу два упрощённых примера для сравнения:
vbscript:
Код: Выделить весь код
;~ Доступ к контекстному меню папок:
Dim $Code
$Code = 'Set objShellApp = CreateObject ("Shell.Application")' & @LF & _
 'Set objFolderItem = objShellApp.NameSpace("C:\").Self' & @LF & _
 'Set objFIVs = objFolderItem.Verbs' & @LF & _
 'MsgBox objFIVs.Count,0,"Кол-во элементов:"' & @LF & _
 'For Each ThisCheck in objFIVs' & @LF & _
 '	If ThisCheck.Name = "&Найти..." Then' & @LF & _
 '		ThisCheck.DoIt' & @LF & _
 '	End If' & @LF & _
 'MsgBox ThisCheck.Name' & @LF & _
 'Next'

$VbsObj = ObjCreate("MSScriptControl.ScriptControl")
$VbsObj.Language = "VbScript"
$VbsObj.AddCode($Code)
javascript:
Код: Выделить весь код
;~ Диалог открытия файлов:
Dim $Code
$Code = 'var WshShell = WScript.CreateObject ("WScript.Shell");' & @LF & _
 'var objDialog = new ActiveXObject("UserAccounts.CommonDialog");' & @LF & _
 'objDialog.Filter = "All Files|*.*";' & @LF & _
 'objDialog.InitialDir = "C:\\";' & @LF & _
 'intResult = objDialog.ShowOpen();' & @LF & _
 'if (intResult) WshShell.PopUp(objDialog.FileName);'

$VbsObj = ObjCreate("MSScriptControl.ScriptControl")
$VbsObj.Language = "JScript"
$VbsObj.AddCode($Code)
Может я что-то делаю не так?

Отправлено: 14:31, 22-05-2007 | #414


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Цитата:
Думаю проблема в AdLib
Я в этом не уверен, это не только связанно с этой процедурой, она чисто для демонстрации бага(?). Мне кажется останавливается весь скрипт целиком, и вот вроде этому доказательство...

Код: Выделить весь код
Opt("GuiOnEventMode", 1)

GUICreate("Test")
GUISetOnEvent(-3, "Quit")

GUICtrlCreateMenu("Test Menu")

GUISetState()

While 1
    Sleep(10)
    ConsoleWrite("! test")
WEnd

Func Quit()
    Exit
EndFunc
Тащим ГУИ, или просто нажимаем на, вроде полусозданное меню, и в консоль ничего не пишется....

Цитата:
нужно либо избегать таких вызовов, либо использовать модель GUIRegisterMsg, которая поддерживается самой системой
А возможно ли таким методом запустить выполнение определённх операции по заданному интервалу? (аналогично Adlib). Хотя сомневаюсь что это поможет, скрипт всё ровно будет останавливаться (полагаю).

Цитата:
Весьма забавный трюк, только какая в нем польза, если возможности AutoIT на порядок шире VBS?
Динамический код однако - Можно таким образом создавать функции в обычном файле, чтобы даже закомпилированный скрипт мог их обрабатывать - ну это как опция вообще то, а замысел в том, что иногда функция на VBS сработает куда быстрее чем AutoIt'овская (в некоторых случаях), основная идея не моя, это я "украл" на офф. форуме, там для сортировки ListView (при чём очень быстрой) используется именно такой метод. А я всего лишь по такому же методу сделал набросок для функции ProcessExists() (которую недавно написал на VBS), и в качестве демонстрации использовал её в коде .

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 21:54, 22-05-2007 | #415


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Diamond
Цитата:
VbScript'ы у меня запускаются а вот с JavaScript'ами почему-то ничего не выходит.
Я если честно с JavaScript никогда не работал, скорее всего нужен либо другой объект, либо другой синтаксис для этого объекта, у меня подобные ошибки выводились когда писал неверный синтаксис в коде VBS, видимо для обработки кода нужен точный синтаксис, иначе действие для объекта не релевантное.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 22:07, 22-05-2007 | #416


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата:
Мне кажется останавливается весь скрипт целиком
а я и не оспаривал, только предложил обходной путь
Цитата:
А возможно ли таким методом запустить выполнение определённх операции по заданному интервалу?
из самого скрипта нет, ты веть сам это показал выше ... только извне
Цитата:
сомневаюсь что это поможет, скрипт всё ровно будет останавливаться
не будет, так как вызовы функций выполняет система а не скрипт - проверено!

Отправлено: 04:27, 23-05-2007 | #417


Старожил


Сообщения: 205
Благодарности: 20

Профиль | Отправить PM | Цитировать


Цитата:
Мне кажется останавливается весь скрипт целиком, и вот вроде этому доказательство...
Если создать в autoit прогресс бар и нажать на него мышкой, то он остановится.
Если во время архивации WINRAR нажать на окно мышкой архивация остановится! Мне кажется тут дело в системе, а не в Autoit.

Отправлено: 04:57, 23-05-2007 | #418


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


amel27
Цитата:
не будет, так как вызовы функций выполняет система а не скрипт - проверено!
Ок, а как это реализовать? (хотябы набросок того как оно будет запускать к примеру каждые 100 мс определённую функцию).

VelDmi
Цитата:
Если создать в autoit прогресс бар и нажать на него мышкой, то он остановится.
Нажать мышкой на сам прогресс? у меня не останавлвиается .

Цитата:
Если во время архивации WINRAR нажать на окно мышкой архивация остановится!
Это да, видимо когда писали Winrar это не предусмотрели .

Цитата:
Мне кажется тут дело в системе, а не в Autoit.
Как раз то нет, я об этом и твердил...

Цитата:
разработчики свернули вину на Windows, мол это баг самой ОС, хотя не смотря на это, некоторые программы (и кстати, написанные тоже на C++) умудряются "не останавливать" свою работу на момент перетаскивания их окна или любой другой указанной ранее “дейтяльности” со стороны юзера.
Добавлено:
Т.е получается, что это ответственность программиста предусматривать подобные вещи, а не системы...

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 05:52, 23-05-2007 | #419


Аватара для TERMINAL

Ветеран


Сообщения: 753
Благодарности: 28

Профиль | Отправить PM | Цитировать


Хотел написать автоустановку разных антивирусов-написал, но проблема вот такая- каждый антивирус заканчивает свою установку по разному и у меня проблема с теми которые начинают сразу после установки сканить диски. Паузу ставить безсмыслено, а вот с процессами поработать можно было было. Какой скрипт лучше написать, если при сканировании антивир процесс грузит примерно до 40 процентов, а когда закончен равен нулю =0 (я так думаю) !? Или может кто-то с этим сталкивался? Свои мысли может изложить...

Отправлено: 16:24, 23-05-2007 | #420



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 1.3] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 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




 
Переход