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

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

 

Аватара для desperate

Старожил


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

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


Да забыл указать самое главное, мне надо не только вкладку Сеть -> свойства TCP/IP настроить, но и другие параметры, шифрование, WINS и проче.... вообщем пройтись по всем вклдкам свойств определенного адаптера (т.к. VPN создается для работы с провайдером спутникового интернета)

-------
Ты рожден для того, чтобы быть виноватым
Lipetsk *nix Association


Отправлено: 10:20, 08-12-2006 | #31



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

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


Googler


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

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


Creat0R
Цитата:
Что в функции нужно поменять, чтобы вместо открытия фалов, был выбор каталога (FileSelectFolder), и также хотелось бы чтобы была функция сохранения файлов (FileSaveDialog) - Буду очень благодарен если поможешь с этими функциями... И ещё (не принципиально) - при выборе файлов, возможно сделать массовый выбор? т.е чтобы можно было выбирать несколько файлов.
Все что касается FileOpenDialog и FileSaveDialog удалось осуществить... и даже чуть больше - новые UDF полностью совместимы с AutoIT-овскими, плюс новые возможности:

- новый флаг: 32 = Hide places bar (не отображать панель с иконками);
- новый параметр: Default Extension (если пользователь не вбил расширение, то автоматом добавляет указанный);
- новый параметр: HWND головного окна GUI (из-за чего собственно весь сыр-бор).
Код: Выделить весь код
Func _FileOpenDialog ($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefaultFile = "", $sDefaultExt = "", $mainGUI = 0)
    Local $iFileLen = 65536 ; Max chars in returned string
    ; API flags prepare
    Local $iFlag = BitOR ( _
        BitShift (BitAND ($iOpt, 1),-12), BitShift (BitAND ($iOpt, 2),-10), BitShift (BitAND ($iOpt, 4),-7 ), _
        BitShift (BitAND ($iOpt, 8),-10), BitShift (BitAND ($iOpt, 4),-17) )
    ; Filter string to array convertion
    Local $asFLines = StringSplit ( $sFilter, '|'), $asFilter [$asFLines [0] *2+1]
    Local $i, $iStart, $iFinal, $suFilter = ''
    $asFilter [0] = $asFLines [0] *2
    For $i=1 To $asFLines [0]
        $iStart = StringInStr ($asFLines [$i], '(', 0, 1)
        $iFinal = StringInStr ($asFLines [$i], ')', 0,-1)
        $asFilter [$i*2-1] = StringStripWS (StringLeft ($asFLines [$i], $iStart-1), 3)
        $asFilter [$i*2] = StringStripWS (StringTrimRight (StringTrimLeft ($asFLines [$i], $iStart), StringLen ($asFLines [$i]) -$iFinal+1), 3)
        $suFilter = $suFilter & 'byte[' & StringLen ($asFilter [$i*2-1])+1 & '];byte[' & StringLen ($asFilter [$i*2])+1 & '];'
    Next
    ; Create API structures
    Local $uOFN = DllStructCreate ('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _
        ';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword' )
    Local $usTitle  = DllStructCreate ('byte[' & StringLen ($sTitle) +1 & ']')
    Local $usInitDir= DllStructCreate ('byte[' & StringLen ($sInitDir) +1 & ']')
    Local $usFilter = DllStructCreate ($suFilter & 'byte')
    Local $usFile   = DllStructCreate ('byte[' & $iFileLen & ']')
    Local $usExtn   = DllStructCreate ('byte[' & StringLen ($sDefaultExt) +1 & ']')
    For $i=1 To $asFilter [0]
        DllStructSetData ($usFilter, $i, $asFilter [$i])
    Next
    ; Set Data of API structures
    DllStructSetData ($usTitle, 1, $sTitle)
    DllStructSetData ($usInitDir, 1, $sInitDir)
    DllStructSetData ($usFile, 1, $sDefaultFile)
    DllStructSetData ($usExtn, 1, $sDefaultExt)
    DllStructSetData ($uOFN,  1, DllStructGetSize($uOFN))
    DllStructSetData ($uOFN,  2, $mainGUI)
    DllStructSetData ($uOFN,  4, DllStructGetPtr ($usFilter))
    DllStructSetData ($uOFN,  7, 1)
    DllStructSetData ($uOFN,  8, DllStructGetPtr ($usFile))
    DllStructSetData ($uOFN,  9, $iFileLen)
    DllStructSetData ($uOFN, 12, DllStructGetPtr ($usInitDir))
    DllStructSetData ($uOFN, 13, DllStructGetPtr ($usTitle))
    DllStructSetData ($uOFN, 14, $iFlag)
    DllStructSetData ($uOFN, 17, DllStructGetPtr ($usExtn))
    DllStructSetData ($uOFN, 23, BitShift (BitAND ($iOpt, 32), 5))
    ; Call API function
    $ret = DllCall ('comdlg32.dll', 'int', 'GetOpenFileName', _
            'ptr', DllStructGetPtr ($uOFN) )
    If $ret [0] Then
        If BitAND ($iOpt, 4) Then
            $i = 1
            While 1
                If DllStructGetData ($usFile, 1, $i) =0 Then
                    If DllStructGetData ($usFile, 1, $i+1) Then
                         DllStructSetData ($usFile, 1, 124, $i)
                    Else
                        ExitLoop
                    EndIf
                EndIf
                $i += 1
            Wend
        EndIf
        Return DllStructGetData ($usFile, 1)
    Else
        SetError (1)
        Return ""
    EndIf
EndFunc

Func _FileSaveDialog ($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefaultFile = "", $sDefaultExt = "", $mainGUI = 0)
    Local $iFileLen = 65536 ; Max chars in returned string
    ; API flags prepare
    Local $iFlag = BitOR (BitShift (BitAND ($iOpt, 2),-10), BitShift (BitAND ($iOpt,16), 3 ))
    ; Filter string to array convertion
    Local $asFLines = StringSplit ( $sFilter, '|'), $asFilter [$asFLines [0] *2+1]
    Local $i, $iStart, $iFinal, $suFilter = ''
    $asFilter [0] = $asFLines [0] *2
    For $i=1 To $asFLines [0]
        $iStart = StringInStr ($asFLines [$i], '(', 0, 1)
        $iFinal = StringInStr ($asFLines [$i], ')', 0,-1)
        $asFilter [$i*2-1] = StringStripWS (StringLeft ($asFLines [$i], $iStart-1), 3)
        $asFilter [$i*2] = StringStripWS (StringTrimRight (StringTrimLeft ($asFLines [$i], $iStart), StringLen ($asFLines [$i]) -$iFinal+1), 3)
        $suFilter = $suFilter & 'byte[' & StringLen ($asFilter [$i*2-1])+1 & '];byte[' & StringLen ($asFilter [$i*2])+1 & '];'
    Next
    ; Create API structures
    Local $uOFN = DllStructCreate ('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _
        ';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword' )
    Local $usTitle  = DllStructCreate ('byte[' & StringLen ($sTitle) +1 & ']')
    Local $usInitDir= DllStructCreate ('byte[' & StringLen ($sInitDir) +1 & ']')
    Local $usFilter = DllStructCreate ($suFilter & 'byte')
    Local $usFile   = DllStructCreate ('byte[' & $iFileLen & ']')
    Local $usExtn   = DllStructCreate ('byte[' & StringLen ($sDefaultExt) +1 & ']')
    For $i=1 To $asFilter [0]
        DllStructSetData ($usFilter, $i, $asFilter [$i])
    Next
    ; Set Data of API structures
    DllStructSetData ($usTitle, 1, $sTitle)
    DllStructSetData ($usInitDir, 1, $sInitDir)
    DllStructSetData ($usFile, 1, $sDefaultFile)
    DllStructSetData ($usExtn, 1, $sDefaultExt)
    DllStructSetData ($uOFN,  1, DllStructGetSize($uOFN))
    DllStructSetData ($uOFN,  2, $mainGUI)
    DllStructSetData ($uOFN,  4, DllStructGetPtr ($usFilter))
    DllStructSetData ($uOFN,  7, 1)
    DllStructSetData ($uOFN,  8, DllStructGetPtr ($usFile))
    DllStructSetData ($uOFN,  9, $iFileLen)
    DllStructSetData ($uOFN, 12, DllStructGetPtr ($usInitDir))
    DllStructSetData ($uOFN, 13, DllStructGetPtr ($usTitle))
    DllStructSetData ($uOFN, 14, $iFlag)
    DllStructSetData ($uOFN, 17, DllStructGetPtr ($usExtn))
    DllStructSetData ($uOFN, 23, BitShift (BitAND ($iOpt, 32), 5))
    ; Call API function
    $ret = DllCall ('comdlg32.dll', 'int', 'GetSaveFileName', _
            'ptr', DllStructGetPtr ($uOFN) )
    If $ret [0] Then
        Return DllStructGetData ($usFile, 1)
    Else
        SetError (1)
        Return ""
    EndIf
EndFunc
З.Ы. Из-за превышения лимита на количество символов оформление пришлось отключить
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:11, 09-12-2006 | #32


Старожил


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

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


Код: Выделить весь код
$ip = '192.168.100.' & $ComputerNumber
If @IPAddress1 <> $ip Then 
	RunWait (@COMSPEC & ' /c chcp 1251 && ' & @SystemDir & '\netsh.exe interface ip dump > netsh.cfg', @ScriptDir, @SW_HIDE)
	FileWriteLine(@ScriptDir & "\error.log", StringFormat("%s:%s:%s %s-%s-%s   Старый IP %s, надо менять", @HOUR, @MIN, @SEC, @MDAY, @MON, @YEAR, @IPAddress1))
	$file = FileOpen(@ScriptDir & '\netsh.cfg', 0)

	; Check if file opened for reading OK
	If $file = -1 Then
		FileWriteLine(@ScriptDir & "\error.log", StringFormat("%s:%s:%s %s-%s-%s   Не могу открыть файл netsh.cfg", @HOUR, @MIN, @SEC, @MDAY, @MON, @YEAR))
		Exit
	EndIf

	; Read in lines of text until the EOF is reached
	For $i = 1 To 60
		$line = FileReadLine($file)
		If StringInStr($line, 'set address name="') = 1 Then ExitLoop
		If $i = 60 Then Shutdown (6)
		Sleep (1000)
	Next

	$line = StringTrimLeft( $line, 17 )	
	$line = StringTrimRight( $line, StringLen($line) - StringInStr($line, 'source') + 2)
	
	FileClose($file)
	
	RunWait (@SystemDir & '\netsh.exe interface ip set address name=' & $line & ' source=static addr=' & $ip & ' mask=255.255.255.0 gateway=none', @SystemDir, @SW_HIDE)
	FileWriteLine(@ScriptDir & "\error.log", StringFormat("%s:%s:%s %s-%s-%s   Сменили IP на: %s", @HOUR, @MIN, @SEC, @MDAY, @MON, @YEAR, $ip))
	$Restart = 'Yes'   ; требуется перезагрузка
EndIf

Отправлено: 12:20, 09-12-2006 | #33


Старожил


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

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


Первый запуск netsh.exe нужен для того, чтобы выяснить имя сетевого интерфейса, т.к. оно может изменяться.
Второй запуск уже устанавливает для подключения необходимый мне ИП, gateway и проч.

Отправлено: 12:44, 09-12-2006 | #34


Аватара для desperate

Старожил


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

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


VelDmi
хороший скрипт, спасибо, но как настроить остальные параметры шифрования,Wins и прочих на других вкладках окна свойств???

-------
Ты рожден для того, чтобы быть виноватым
Lipetsk *nix Association


Отправлено: 15:36, 09-12-2006 | #35


Googler


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

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


biork
Цитата:
скрипт ни как не может найти секцию
Файл получил, все ясно - у тебя INF-файлы из локализованной Windows, а значит в Unicode-кодировке... я подправил пару функций для поддержки файлов в юникоде. Добавь в конец скрипта прилагаемый текст функций и замени по тексту FileReadToArray и FileWriteFromArray на _FileReadUnicodeToArray и _FileWriteUnicodeFromArray соответственно:
Код: Выделить весь код
Func _FileReadUnicodeToArray ($sFilePath, ByRef $aArray)
    Local $hFile = FileOpen ($sFilePath, 0)
    If $hFile = -1 Then
        SetError (1)
        Return 0
    EndIf
    Local $uData = FileRead ($hFile, FileGetSize($sFilePath))
    Local $sData = _WCStrToString ($uData)
    If @error Then
        SetError (2)
        Return 0
    EndIf
    $aArray = StringSplit (StringStripCR ($sData), @LF)
    FileClose ($hFile)
    Return 1
EndFunc

Func _FileWriteUnicodeFromArray ($sFilePath, ByRef $a_Array, $i_Base = 0, $i_UBound = 0)
    Local $hFile
    If Not IsArray ($a_Array) Then
        SetError (2)
        Return 0
    EndIf
    Local $last = UBound ($a_Array) - 1
    If $i_UBound < 1 Or $i_UBound > $last Then $i_UBound = $last
    If $i_Base < 0 Or $i_Base > $last Then $i_Base = 0
    $hFile = FileOpen ($sFilePath, 2)
    If $hFile = -1 Then
        SetError (1)
        Return 0
    EndIf
    FileWrite ($hFile, _StringToWCStr ($a_Array [$i_Base], 1))
    For $x = $i_Base +1 To $i_UBound
        $a_Array [$x] = @CRLF & $a_Array [$x]
        FileWrite ($hFile, _StringToWCStr ($a_Array [$x]))
    Next
    FileClose($hFile)
    Return 1
EndFunc

Func _StringToWCStr (ByRef $sString, $mark = 0)
    Local $len = StringLen ($sString), $wcl= BitShift ($len, -1)
    Local $buf, $ptr
    If $len =0 Then
        If $mark Then Return Chr(0xFF) & Chr(0xFE)
        Return ''
    EndIf
    If $mark Then
        $buf = DllStructCreate ("byte[" & $wcl +2 & "]")
        DllStructSetData ($buf, 1, Chr(0xFF) & Chr(0xFE))
        $ptr = DllStructGetPtr ($buf) +2
    Else
        $buf = DllStructCreate ("byte[" & $wcl & "]")
        $ptr = DllStructGetPtr ($buf)
    EndIf
    Local $ret = DllCall ("Kernel32.dll", "int", "MultiByteToWideChar", _
        "int", 0, _
        "int", 0, _
        "str", $sString, _
        "int", $len,  _
        "ptr", $ptr,  _
        "int", $wcl )
    If $ret [0] Then
        Return DllStructGetData ($buf, 1)
    Else
        $ret = DllCall ("Kernel32.dll", "int", "GetLastError")
        SetError ($ret [0])
    EndIf
EndFunc

Func _WCStrToString (ByRef $wcString)
    Local $wcl = StringLen ($wcString), $len = BitShift ($wcl, 1)
    If $wcl =0 Then Return ''
    Local $out = DllStructCreate ("char[" & $len & "]")
    Local $buf = DllStructCreate ("byte[" & $wcl  & "]")
    Local $ptr = DllStructGetPtr ($buf)
    DllStructSetData ($buf, 1, $wcString)
    If DllStructGetData ($buf, 1, 1) =-1 AND DllStructGetData ($buf, 1, 2) =-2 Then
        $ptr +=2
        $len -=1
    EndIf
    Local $ret = DllCall ("Kernel32.dll", "int", "WideCharToMultiByte", _
        "int", 0, _
        "int", 0, _
        "ptr", $ptr, _
        "int", $len, _
        "ptr", DllStructGetPtr ($out), _
        "int", $len, _
        "int", 0, _
        "int", 0 )
       If $ret [0] Then
        Return DllStructGetData ($out, 1)
    Else
        $ret = DllCall ("Kernel32.dll", "int", "GetLastError")
        SetError ($ret [0])
    EndIf
EndFunc

Последний раз редактировалось amel27, 11-12-2006 в 03:33.

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

Отправлено: 19:40, 09-12-2006 | #36


Старожил


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

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


desperate
Цитата:
хороший скрипт, спасибо, но как настроить остальные параметры шифрования,Wins и прочих на других вкладках окна свойств???
А ты посмотри хелп к netsh.exe, наверняка он много чего еще может.
Код: Выделить весь код
Чтобы получить справку по команде, введите эту команду,
затем пробел и "?"

netsh>interface ip show

Применимы следующие команды:

Команды в этом контексте:
show address   - Отображение конфигурации IP-адресов.
show config    - Отображение IP-адреса и дополнительных сведений.
show dns       - Отображение адресов DNS-сервера.
show icmp      - Отображение статистики ICMP.
show interface - Отображение статистики IP-интерфейса.
show ipaddress - Отображение текущих IP-адресов.
show ipnet     - Отображение сопоставления сетей IP и физических носителей.
show ipstats   - Отображение статистики IP.
show joins     - Отображение присоединенных многоадресных групп.
show offload   - Отображает информацию разгрузки.
show tcpconn   - Отображение TCP-подключений.
show tcpstats  - Отображение статистики TCP.
show udpconn   - Отображение UDP-подключений.
show udpstats  - Отображение статистики UDP.
show wins      - Отображение адресов WINS-сервера.

Отправлено: 08:06, 10-12-2006 | #37


Аватара для desperate

Старожил


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

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


VelDmi
без вариантов, не получилось с помощью netsh настроить все параметры.
Поэтому мой вопрос по поводу автоматического открытия Properties определенного сетевого подключения остается открытым.

-------
Ты рожден для того, чтобы быть виноватым
Lipetsk *nix Association


Отправлено: 19:46, 10-12-2006 | #38


Googler


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

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


desperate
Цитата:
не получилось с помощью netsh настроить все параметры
CMAK пробовал?
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:17, 11-12-2006 | #39


Аватара для desperate

Старожил


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

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


Снимаю свой вопрос, проблема решиласт сама собой, когда набрел на форуме а статью про автоматическое создание dial-up соединения.
у кого будет подобная проблема пишити в личку и тогда создам отдельный топик, в котором будем развиваться и совершенствоваться.

-------
Ты рожден для того, чтобы быть виноватым
Lipetsk *nix Association


Последний раз редактировалось Sanja Alone, 11-12-2006 в 17:20. Причина: Дублирование текста


Отправлено: 14:49, 11-12-2006 | #40



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




 
Переход