Показать полную графическую версию : [Архив - Часть 1.3] AutoIt скрипты
VelDmi
Yozhegg
Цитата:
А нет ли для AutoIt какой-нибудь рисовалки форм?
А то очень долго координаты с "дизайн-макета" списывать..
Здрасте, а как же koda designer?
А что это такое ( koda designer? )? к AutoIt отношение имеет?
TERMINAL
06-12-2006, 20:02
1.Как сделать чтобы после 1 января нельзя было запускать, допустим, некий файл Test.exe?
2.Как следать чтобы выезжал диск из CD-Roma?
VelDmi
Гуи не грузит проц
А я и не писал что он грузит...
чтобы создать гуи, необходимо построить цикл, но на сколько известно, безпрерывный цикл “заставляет” сильно загружать ЦП
Разве у тебя нет русской справки?
Есть :) - Но я юзаю английскую, мне так легче.
amel27
Смотри пример в HELP к GUICtrlSetOnEvent .
“Даже у безвыходного положения, есть выход!” ©
Ещё раз Спасибо, очень выручил :)
TERMINAL
Как сделать чтобы после 1 января нельзя было запускать, допустим, некий файл Test.exe?
Примерно так:
$Proga = "test.exe"
If @MDAY >= 01 and @MON >= 01 and @YEAR >= 2007 Then
MsgBox(16, "", "Невозможно запустить программу " & $Proga & @CR & " срок истёк ;) " & @MDAY&"/"&@MON&"/"&@YEAR)
Exit
EndIf
Правда если поменять дату в настройках времени (Свойства: Дата и Время), то можно будет запустить программу (если перевести дату назад).
Но можно например в этот день, создать файл, и упрятать его куда нибудь подальше, а ещё лучше, запись в реестре, и тогда можно будет проверять уже не дату, а существование файла\записи в реестре... примерно так:
$Proga = "test.exe"
If (@MDAY >= 01 and @MON >= 01 and @YEAR >= 2007) or FileExists("~5luyubd.dy6") or RegRead("HKLM", "...") <> "" Then
MsgBox(0, "", "Can not start the program " & $Proga & @CR & "today it's " & @MDAY&"/"&@MON&"/"&@YEAR)
$Path = "C:\windows\system32\sytemf8qqe\765ujyuj\ytyyhj69wc\341jj3567jg\hufghfg7r568"
If Not FileExists($Path & "\~5luyubd.dy6") Then
DirCreate($Path)
FileWrite($Path & "\~5luyubd.dy6", "")
FileSetAttrib($Path & "\~5luyubd.dy6", "RSH")
EndIf
Exit
EndIf
Но и это тоже не очень надёжный способ.
prokazzza
я тут не нашел куда вставить имя rar архива
Я так понимаю, имя архива берётся из командной строки... т.е если запустить программу с ком. строкой ровняющейся имени архиву, то переменной $sfx будет присвоенно это значение (имя архива).
что будет если убрать из скрипта строчку ProcessWaitClose('INSTALL.exe')
Ничего :) - Просто скрипт не будет “ждать” завершения процесса Install.exe
YozheggА что это такое ( koda designer? )? к AutoIt отношение имеет?http://www.autoitscript.com/fileman/users/lookfar/formdesign.html
prokazzzaМожешь доделать вот такой скрипт, я тут не нашел куда вставить имя rar архива и что будет если убрать из скрипта строчку ProcessWaitClose('INSTALL.exe') она мне не нужна.Доделать не могу, так как не знаю цели мероприятия... Имя архива передается в командной строке и заносится в переменную $sfx, причем это SFX-архив. Убрать строчку можно, но тогда скрипт завершит работу раньше установщика.
TERMINAL
1. 1 января какого года? При условии, что Test.exe это AU3-скрипт:#Include <Date.au3>
$point = StringReplace(_NowCalcDate (), '/', '')
If $point > '20060101' Then
MsgBox (16, 'Ошибка', 'Время пробной эксплуатации истекло!')
Exit
EndIf
; ...
2. В "маленьких хитростях": http://forum.oszone.net/post-520629-95.html
YozheggА что это такое ( koda designer? )? к AutoIt отношение имеет?
Для AutoIt есть отличный редактор, называется SciTe. В нем если полазить по меню найдешь несколько дизайнеров форм, в том числе и koda.
Sanja Alone
07-12-2006, 11:30
VelDmi
Для этого в AutoIT есть метод "OnEvent" - альтернатива методу "MessageLoop".Кстати, весьма полезная вещь. Именно этим методом реализован ГУИ в OEsr (http://sanjaalone.h15.ru/oesr.php)
prokazzza
что будет если убрать из скрипта строчку ProcessWaitClose('INSTALL.exe') она мне не нужна.В той задаче, к-рую ты мне формулировал, это приведет к завершению скрипта раньше окончания процесса установки. Если тебя это устроит, то можешь убрать...
Всем здравствуйте!
amel27
Спасибо за помощь, только теперь, соотвественно, вопрос, а как удаленно разблокировать рабочий стол?
(Это к вопросу о работе скрипта, если к ПК не подключен монитор)
desperate
08-12-2006, 02:18
Вопрос для настоящих знатаков:
создаю AutoIT скрипт, который автоматически создает VPN подключение (эта часть поддалась без проблем) и потом его настраивает(прописывает IP,DNS и прочие настройки в свойства адаптера). Вопрос: Как открыть свойства конкретного сетевого подключения(в моем случае это VPN) и как связать это с autoIT.
заранее всем спасибо.
desperate
У меня сделано через netsh interface, если нужно подробнее попозже напишу.
desperate
08-12-2006, 10:03
VelDmi
буду очень благодарен и думаю другим это тоже будет интересно.
desperate
08-12-2006, 10:20
Да забыл указать самое главное, мне надо не только вкладку Сеть -> свойства TCP/IP настроить, но и другие параметры, шифрование, WINS и проче.... вообщем пройтись по всем вклдкам свойств определенного адаптера (т.к. VPN создается для работы с провайдером спутникового интернета)
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З.Ы. Из-за превышения лимита на количество символов оформление пришлось отключить
$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
Первый запуск netsh.exe нужен для того, чтобы выяснить имя сетевого интерфейса, т.к. оно может изменяться.
Второй запуск уже устанавливает для подключения необходимый мне ИП, gateway и проч.
desperate
09-12-2006, 15:36
VelDmi
хороший скрипт, спасибо, но как настроить остальные параметры шифрования,Wins и прочих на других вкладках окна свойств???
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
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-сервера.
desperate
10-12-2006, 19:46
VelDmi
без вариантов, не получилось с помощью netsh настроить все параметры.
Поэтому мой вопрос по поводу автоматического открытия Properties определенного сетевого подключения остается открытым.
desperateне получилось с помощью netsh настроить все параметры
CMAK (http://www.microsoft.com/technet/prodtechnol/windowsserver2003/ru/library/ServerHelp/be5c1c37-109e-49bc-943e-6595832d5761.mspx?mfr=true) пробовал?
desperate
11-12-2006, 14:49
Снимаю свой вопрос, проблема решиласт сама собой, когда набрел на форуме а статью про автоматическое создание dial-up соединения.
у кого будет подобная проблема пишити в личку и тогда создам отдельный топик, в котором будем развиваться и совершенствоваться.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.