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

Компьютерный форум 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

 

Новый участник


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

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


Интересует взлом скомпилированного AutoIt .exe. Можно или нет это сделать, если при компиляции был выставлен пароль или убрана галка позволяющая декомпилировать?

Отправлено: 16:11, 15-05-2007 | #401



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

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


Аватара для Creat0R

Must AutoIt


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

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


storm2005
Цитата:
Можно или нет это сделать, если при компиляции был выставлен пароль или убрана галка позволяющая декомпилировать?
Если был выставлен пароль, то естественно при его наличии это возможно, а вот если была убрана галка позволяющая декомпилировать, то нет.

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

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

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


Отправлено: 17:25, 15-05-2007 | #402


Новый участник


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

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


Цитата:
Если был выставлен пароль, то естественно при его наличии это возможно, а вот если была убрана галка позволяющая декомпилировать, то нет.
если есть пароль но он неизвестен. можно ли декомпилировать?

интересует этот вопрос т. к. хочу устанавливать некоторый софт через логонный скрипт юзера. но проблема в том, что под юзером большинство софта не ставится т. к. юзер не обладает административными правами. в AutoIt нашел замечательную функцию RunAsSet в которой можно передать пароль в отличие от команды runas. но хотелось быть уверенным, что скомпилировав скрипт под паролем его никто не декомпилирует.

Отправлено: 10:02, 16-05-2007 | #403


Googler


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

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


storm2005
Цитата:
если есть пароль но он неизвестен. можно ли декомпилировать?
Можно, причем это ответ не мой, а разработчиков... Говорят есть хакнутый aut2exe, декомпилирующий такие скрипты, хотя сам я его не видел... впрочем и не искал.
Цитата:
проблема в том, что под юзером большинство софта не ставится т. к. юзер не обладает административными правами
такие задачи обычно решаются клиент-серверным методом, когда один модуль работает с правами системы/админа и заточен на выполнение конкретных задач (например, установки софта), а второй - под обычным юзером и дает ему "команды"... Для этого можно использовать технологии COM, WMI или обычный скрипт, запущенный в качестве службы.

Отправлено: 17:12, 16-05-2007 | #404


Ветеран


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

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


storm2005
Цитата:
но хотелось быть уверенным, что скомпилировав скрипт под паролем его никто не декомпилирует.
Очень хочется примеры таких скриптов узнать! В смысле какую такую инфу ты защищаешь от пользователя.?!
ALL
Последнее время при адаптации скриптов под новые версии программ наталкиваюсь на странное поведение AutoIT.

А именно при выполнении команды ControlClick как бы не происходит отработки нажатия кнопки.
Например это началось в Wintools Net Pro начиная с версии после 8.1.1
Есть такой же проблемный кусок и в установке OutPost (вернее он всегда там был)
Код: Выделить весь код
	WinWaitActive("Configuration Wizard","")
	$text = WinGetText("Configuration Wizard","")
	If StringRegExp($text,"Some applications that can cause system stability issues") Then
		If Not WinActive("Configuration Wizard","Some applications that can cause system stability issues") Then WinActivate("Configuration Wizard","Some applications that can cause system stability issues")
		WinWaitActive("Configuration Wizard","Some applications that can cause system stability issues")
		Send("{TAB}{ENTER}")
	EndIF

	If StringRegExp($text,"Advanced security") Then
		If Not WinActive("Configuration Wizard","Advanced security") Then WinActivate("Configuration Wizard","Advanced security")
		WinWaitActive("Configuration Wizard","Advanced security")
		Sleep(30)
		ControlClick("Configuration Wizard","Advanced security","Button3")
		Sleep(30)
		Send("{ENTER}")
	EndIF
Не получается выбрать "Advanced security" и пройти далее.

Может кто-то уже решал такую проблему?!
Может как-то можно задавать длительность нажатия кнопки?!

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


Старожил


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

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


В обсуждаемом продукте вроде есть запись макросов - как это можно осуществить и можно ли?

Отправлено: 20:17, 17-05-2007 | #406


Старожил


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

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


Имеется каталог CutDir. в нем куча файлов. Есть файл (file.txt) содержащий строки вида:
C:\Compare\CutDir\Bin\SD0405.dll
C:\Compare\CutDir\Bin\LOA\SD0434.dll
C:\Compare\CutDir\WEZ\BIGz\erwg.dll

Как правильнее удалить из каталога все файлы, не содержащиеся в списках?
Пробовал

$line = FileReadLine($file)
FileMove ($CutDir & $line2, $DestDir & $line2, 0)
Работает, только для файлов в корне каталога CutDir, т.е. он не создает автоматически вложенные каталоги при копировании. А мне нужно оставить только файлы, перечисленные в списке, причем и во всех вложенных каталогах тоже.

Отправлено: 20:48, 17-05-2007 | #407


Аватара для Creat0R

Must AutoIt


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

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


VelDmi
amel27 как то написал функцию возвращающую массив дерева каталогов включая подкаталоги, с её помощью эту задачу реализовать довольно просто:

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

;Создаём нужные переменные и массив для содержания списка файлов которые удалять не нужно
$Dir = "CutDir"
$ExcludeListFile = "file.txt"
Dim $ExcludeListArr[1]

;Получаем массив структуры каталогов в папке "CutDir" (из переменной $Dir)
$DirsArray =  _DirListToArray($Dir)

;Получаем массив со списком файлов которые не нужно удалять (из файл от переменной $ExcludeListFile)..
_FileReadToArray($ExcludeListFile, $ExcludeListArr)

;Проходим по массиву структуры каталогов, получаем массив со списком файлов в каждом каталоге, и удаляем файлы не находящиеся в списке.
For $i = 1 To UBound($DirsArray)-1
    ;Получаем массив со списком файлов текущего каталога...
    $InDirFilesArr = _FileListToArray($DirsArray[$i], "*.*", 1)

        ;Если в текущем каталоге найдены файлы, то проходимся по массиву и ищем текущий элемент в массиве списка исключенных файлов.
    If IsArray($InDirFilesArr) Then
        For $iF = 1 To UBound($InDirFilesArr)-1
            ;Поиск элемента (текущего файла включая полный путь)...
            $SearchInArr = _ArraySearch($ExcludeListArr, $DirsArray[$i] & "\" & $InDirFilesArr[$iF])
            ;Если не найден, то удаляем файл...
            If $SearchInArr = -1 Then FileDelete($DirsArray[$i] & "\" & $InDirFilesArr[$iF])
        Next
    EndIf
Next

;Функция возвращает массив структуры подкаталогов
Func _DirListToArray ($sPath)
    Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2)
    If IsArray ($alist) Then
        For $i=1 To $alist [0]
            _ArrayAdd ($rlist, $sPath & "\" & $alist [$i])
            $blist = _DirListToArray ($sPath & "\" & $alist [$i])
            If $blist[0]>0 Then
                For $j=1 To $blist [0]
                    _ArrayAdd ($rlist, $blist [$j])
                Next
            EndIf
        Next
    EndIf
    $rlist [0] = UBound ($rlist) - 1
    Return $rlist
EndFunc
P.S
Я не тестировал скрипт, написал на скорую руку.

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

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

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:46, 17-05-2007 | #408


Старожил


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

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


Creat0R
Уфф, мне не дано такое понять...
Написал сам через попу, но работает вроде:
Код: Выделить весь код
RunWait (@COMSPEC & ' /c fsum.exe -r -d".\CutDir" *.* > sums.md5', @ScriptDir, @SW_HIDE)
;через эту прогу создается список файлов
$filesums = FileOpen(@ScriptDir& '\sums.md5', 0)
If $filesums = -1 Then
     MsgBox(0, "Ошибка.", "Не могу открыть файл sums.md5")
     Exit
 EndIf
$filesums2 = FileOpen(@ScriptDir& '\sums2.md5', 0)
If $filesums2 = -1 Then
     MsgBox(0, "Ошибка.", "Не могу открыть файл sums2.md5")
     Exit
 EndIf

While 1
	$i = FileReadLine($filesums2)
	If @error = -1 Then ExitLoop
	$Count2 = $Count2 + 1
WEnd
FileClose($filesums2)

While 1
     $line = FileReadLine($filesums)
	 If @error = -1 Then ExitLoop
     If StringLeft ($line, 1) = ';' Then ContinueLoop
		 $filesums2 = FileOpen(@ScriptDir& '\sums2.md5', 0)
		 $Del = 1
		For $i = 1 To $Count2
			If $line = FileReadLine($filesums2) Then 
				$Del = 0
				ExitLoop
			EndIf
		Next
		If $Del = 1 Then FileDelete ($CutDir & StringTrimLeft( $line, 34 ))
		FileClose($filesums2)
WEnd
FileClose($filesums)
теперь попробую твой способ.

Отправлено: 22:30, 17-05-2007 | #409


Аватара для Creat0R

Must AutoIt


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

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


VelDmi
Цитата:
Уфф, мне не дано такое понять...
Время покажет, я так тоже раньше думал, если бы мне, где то пол года назад показали подобный код, я бы точно также отреагировал

Вот превратил всё это дело в функцию, теперь проверил работоспособность, вроде работает

Переменная $ExcludeList также может иметь сразу список файлов для исключения, вот пример - $ExcludeList = "C:\CutDir\test.txt|C:\CutDir\test2.txt" - файлы C:\CutDir\test.txt и C:\CutDir\test2.txt не будут тронуты функцией. Также можно передать во второй параметр функции _DeleteFilesWithExcludes() массив содержащий список файлов для исключения, ну и как показанно в примере, поддерживается и обычный путь к файлу, с которого будет браться список исключении.

При успешной операции, возвращает @extended, макрос будет содержать число файлов которые были удалены (именно удалены, не просто количество файлов в соответствии со списком исключении).

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

$Dir = @ScriptDir & "\CutDir"

;Эта переменная может быть массивом, полным списком файлов исключении (разделённый через |),
;а так-же это можт быть путь к файлу содержащий список файлов которые будут исключены при удалении.
$ExcludeList = @ScriptDir & "\file.txt" ;Пример переменной - "c:\CutDir\test.txt|c:\CutDir\test2.txt" ... и т.д

_DeleteFilesWithExcludes($Dir, $ExcludeList)

If Not @error Then MsgBox(262144+64, "Finish", "Было удалено <" & @extended & "> файлов")

;Функция для удаления файлов из всех подкаталогов заданного каталога, в соответствии со списком исключении.
Func _DeleteFilesWithExcludes($sPath, $ExcludeList)
    Local $ExcludeListArr[1], $Extended = 0
    ;Если не существует каталога (в котором следует производить удаление) или переменная $sPath не является каталогом,
    ;возвращаем ошибку №1.
    If Not StringInStr(FileGetAttrib($sPath), "D") Then Return SetError(1, 0, 0)
    ;Получаем массив структуры каталогов в папке "CutDir" (из переменной $Dir)
    Local $DirsArray =  _DirListToArray($sPath)

        If Not IsArray($ExcludeList) And FileExists($ExcludeList) Then
        ;Получаем массив со списком файлов которые не нужно удалять (из файл от переменной $ExcludeList)..
        _FileReadToArray($ExcludeList, $ExcludeListArr)
    ElseIf IsString($ExcludeList) And StringInStr($ExcludeList, "|") Then
        ;Превращаем переменную в массив (разделяя этим символом |)
        $ExcludeListArr = StringSplit($ExcludeList, "|")
    ElseIf IsArray($ExcludeList) Then
        ;Присваиваем внутреннему массиву (ранее созданному) то же значение что и у массива $ExcludeList
        $ExcludeListArr = $ExcludeList
    Else
        ;Не предвиденная ошибка, передана пустая переменная или неверный формат массива/переменной - возвращаем ошибку №2.
        Return SetError(2, 0, 0)
    EndIf

        ;Получаем массив со списком файлов корневого каталога ($sPath)...
    $RootFilesArr = _FileListToArray($sPath, "*.*", 1)
    If IsArray($RootFilesArr) Then
        For $iR = 1 To UBound($RootFilesArr)-1
            ;Поиск элемента (текущего файла включая полный путь)...
            $SearchInArr = _ArraySearch($ExcludeListArr, $sPath & "\" & $RootFilesArr[$iR])
            ;Если не найден, то удаляем файл...
            If $SearchInArr = -1 Then $Extended += FileDelete($sPath & "\" & $RootFilesArr[$iR])
        Next
    EndIf

        ;Проходим по массиву структуры каталогов, получаем массив со списком файлов в каждом каталоге,
    ;и удаляем файлы не находящиеся в списке.
    For $i = 1 To UBound($DirsArray)-1
        ;Получаем массив со списком файлов текущего каталога...
        $InDirFilesArr = _FileListToArray($DirsArray[$i], "*.*", 1)

                ;Если в текущем каталоге найдены файлы, то проходимся по массиву и ищем текущий элемент в массиве списка исключенных файлов.
        If IsArray($InDirFilesArr) Then
            For $iF = 1 To UBound($InDirFilesArr)-1
                ;Поиск элемента (текущего файла включая полный путь)...
                $SearchInArr = _ArraySearch($ExcludeListArr, $DirsArray[$i] & "\" & $InDirFilesArr[$iF])
                ;Если не найден, то удаляем файл...
                If $SearchInArr = -1 Then $Extended += FileDelete($DirsArray[$i] & "\" & $InDirFilesArr[$iF])
            Next
        EndIf
    Next
    Return SetError(0, $Extended, 1)
EndFunc

;Функция возвращает массив структуры подкаталогов
Func _DirListToArray ($sPath)
    Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2)
    If IsArray ($alist) Then
        For $i=1 To $alist [0]
            _ArrayAdd ($rlist, $sPath & "\" & $alist [$i])
            $blist = _DirListToArray ($sPath & "\" & $alist [$i])
            If $blist[0]>0 Then
                For $j=1 To $blist [0]
                    _ArrayAdd ($rlist, $blist [$j])
                Next
            EndIf
        Next
    EndIf
    $rlist [0] = UBound ($rlist) - 1
    Return $rlist
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

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

Отправлено: 23:41, 17-05-2007 | #410



Компьютерный форум 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




 
Переход