PDA

Показать полную графическую версию : [Архив - Часть 1.3] AutoIt скрипты


Страниц : 1 2 [3] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Sanja Alone
11-12-2006, 17:43
desperate
тогда создам отдельный топик
Думаю, что лучше дополнить уже существующую тему Соединение по dial-up автоматом (http://forum.oszone.net/thread-42666.html).

biork
12-12-2006, 10:59
amel27
Огромное спасибище! Всё работает!

Heaven
14-12-2006, 09:09
Извините пожалуйста, а существует ли такая команда с помощью которой можно было бы закрыть определенное окно!

Например я сделал так что при открытии моего диска(autorun)он сначало записывает мой шрифт в директорию %windir%\Fonts и
Я сделал так
поместил explorer.exe в директорию диска и написал в cmd файле
%CDROM%\Autoplay\explorer.exe %windir%\Fonts
Это мне нужно чтобы он открывался
А как сделать так чтобы она вслед за этим закрывалась автоматически
Пожалуйста напишите мне

DenchikK
14-12-2006, 18:00
А можно ли средствами AutoIT (навеоняка можно, только придумать не
могу как) удалить файл с фиксированным именем во всех неопределенных
деррикториях - имена, количество, уровни которых заранее неизвестны?

Допустим имеем файл который надо удалить - 1.txt
Имеем каталог в котором его надо удалять - 2

И вот в этом то каталоге может быть любое количество каталогов,
подкаталогов, подподкаталогов - какие - не понятно, имена их - не
известно, количество - то же, уровней вложения - тем более.

Мозг опухают - в хелпе пока ничего не смог отыскать.

Creat0R
14-12-2006, 20:59
amel27Все что касается FileOpenDialog и FileSaveDialog удалось осуществить... и даже чуть больше - новые UDF полностью совместимы с AutoIT-овскими, плюс новые возможности:

Абалдеть!!! Спасибо! осталось только для FileSelectFolder придумать функцию, и будет суперь счастье :)

Есть вопрос - а можно чтобы вместо (как опция) прикрепления гуи, можно было также прикреплять любое другое окно (по его заголовку)?

P.S
При разукрашивании скрипта, если поставить Send("{...}") то скрипт ругается на неопознанные стили, а точнее, это если только есть кривые круглые ораньжевые скобки :)

Heaven
существует ли такая команда с помощью которой можно было бы закрыть определенное окно!
WinClose("Заголовок окна", "Текст окна")
как сделать так чтобы она вслед за этим закрывалась автоматически
Ты имеешь в виду папка Fonts? - WinClose("Fonts")

DenchikK
А можно ли средствами AutoIT (навеоняка можно, только придумать не
могу как) удалить файл с фиксированным именем во всех неопределенных
деррикториях - имена, количество, уровни которых заранее неизвестны?

Можно (использовал функцию by amel27) :



#include <File.au3>
#include <Array.au3>

$Path = @ScriptDir & "\2"
$FileName = "1.txt"

$DirsList = _DirListToArray ($Path)
For $i = 1 to $DirsList[0]
FileDelete($DirsList[$i] & "\" & $FileName)
Next
FileDelete($Path & "\" & $FileName)

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

DenchikK
16-12-2006, 04:15
Creat0R
Извините пожалуйста за глупый вопрос - скопировал скрипт в файл au3,
переписал в тот каталог откуда запускаю - 2 файла include. Запускаю -
а мне выдается ошибка - Error: Unknown function name. на строчке
Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2)

amel27
16-12-2006, 11:01
DenchikK
проверь наличие в заголовке скрипта строчек:#include <File.au3>
#include <Array.au3>Creat0RЕсть вопрос - а можно чтобы вместо (как опция) прикрепления гуи, можно было также прикреплять любое другое окно (по его заголовку)?я не спец в ГУИ, но думаю в общем случае это неосуществимо
скрипт ругается на неопознанные стилистиль для скобок добавил (http://forum.oszone.net/post-511410-474.html)

DenchikK
16-12-2006, 11:41
amel27
Есть эти строчки - один в один все как указано у Creat0R

amel27
16-12-2006, 12:11
DenchikKпереписал в тот каталог откуда запускаю - 2 файла includeа разве со штатного INCLUDE эти файлы не подтягиваются?... Из справки по Include - если AutoIT установлен штатным установщиком то файлы берутся из установочного каталога\Include, в противном случае в каталоге скрипта нужно создавать папку с именем Include и туда пихать UDF-файлы или править реестр (хотя последние варианты не пробовал).

DenchikK
17-12-2006, 03:44
а разве со штатного INCLUDE эти файлы не подтягиваются?
Это я уже от безысходности. Варианты пробую. AutoIT версий 3.1.0 и 3.1.1 ставил. В установочного каталога\Include они существуют, пихал эти файлы и рядом со скриптом, и рядом со скриптом каталогом - не работает! Что такое может быть?
Добавлено:
Нашел в скрипте Sanja Alone функцию _FileListToArray и поместил
её в файл \Include\Array.au3 (ибо этой функции ни в одно файле
каталога \Include не было), вот код:
Func _FileListToArray($sPath, $sFilter = "*", $iFlag = 0)
Local $hSearch, $sFile, $asFileList[1]
If Not FileExists($sPath) Then
SetError(1)
Return ""
EndIf
If (StringInStr($sFilter, "\")) or (StringInStr($sFilter, "/")) or (StringInStr($sFilter, ":")) or (StringInStr($sFilter, ">")) or (StringInStr($sFilter, "<")) or (StringInStr($sFilter, "|")) or (StringStripWS($sFilter, 8) = "") Then
SetError(2)
Return 0
EndIf
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then
SetError(3)
Return ""
EndIf
$asFileList[0] = 0
$hSearch = FileFindFirstFile($sPath & "\" & $sFilter)
If $hSearch = -1 Then
SetError(0)
Return 0
EndIf
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If $iFlag = 1 Then
If StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") <> 0 Then ContinueLoop
EndIf
If $iFlag = 2 Then
If StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") = 0 Then ContinueLoop
EndIf
ReDim $asFileList[UBound($asFileList) + 1]
$asFileList[0] = $asFileList[0] + 1
$asFileList[UBound($asFileList) - 1] = $sFile
WEnd
FileClose($hSearch)
SetError(0)
If $asFileList[0] = 0 Then Return ""
Return $asFileList
EndFunc ;==>_FileListToArray
теперь ошибка выдается такая:
Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2)
Local $i, $j, $rlist[1] ERROR
Error: No virriable given for "Dim", "Local", "Global" or "Const" statement.

mpn
17-12-2006, 09:30
Всем привет!
Поможите, кто может.
Задача простая. Необходимо периодически на удаленном компьютере (под Unix) выполнять ряд команд с дальнейшей обработкой выводимой в консоль информации. Хочу использовать для этого строку $t=Run("telnet","",@SW_HIDE,3) и далее при помощи StdinWrite, StdoutRead работать с открытой консолью. Но почему-то процесс telnet.exe закрывается сразу же после запуска. Где ошибка?

Creat0R
17-12-2006, 10:16
amel27
думаю в общем случае это неосуществимо
Да, я тоже так предположил сразу, но всё равно спасибо за то что есть (с гуи) - я вообще то предпологал что и это будет не реализуемо, но к огромному счастью, оказалось что это не так - надеюсь что когда нибудь и с этим делом вяснится что мы ошибаемся :).

стиль для скобок добавил
Thnx! ;)

mpn
почему-то процесс telnet.exe закрывается сразу же после запуска. Где ошибка?
Может этот процесс требует чтобы рабочий каталог был тот в котором он находится?
Попробуй перед запускам сменить рабочий каталог FileChangeDir("путь\к telnet.exe\"), или указать путь в самой сроке запуска...

$t=Run("telnet.exe","путь\к telnet.exe\",@SW_HIDE,3)

Или просто с полным путём запустить...

$t=Run("путь\к telnet.exe\telnet.exe","",@SW_HIDE,3)

DenchikK

Пиши скрипт так, и ненужно никаких Include ;) :


$Path = @ScriptDir & "\2"
$FileName = "1.txt"

$DirsList = _DirListToArray ($Path)
For $i = 1 to $DirsList[0]
FileDelete($DirsList[$i] & "\" & $FileName)
Next
FileDelete($Path & "\" & $FileName)

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

Func _FileListToArray($sPath, $sFilter = "*", $iFlag = 0)
Local $hSearch, $sFile, $asFileList[1]
If Not FileExists($sPath) Then Return SetError(1,1,"")
If (StringInStr($sFilter, "\")) or (StringInStr($sFilter, "/")) or (StringInStr($sFilter, ":")) or (StringInStr($sFilter, ">")) or (StringInStr($sFilter, "<")) or (StringInStr($sFilter, "|")) or (StringStripWS($sFilter, 8) = "") Then Return SetError(2,2,"")
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3,3,"")
$hSearch = FileFindFirstFile($sPath & "\" & $sFilter)
If $hSearch = -1 Then Return SetError(4,4,"")
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then
SetError(0)
ExitLoop
EndIf
If $iFlag = 1 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") <> 0 Then ContinueLoop
If $iFlag = 2 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") = 0 Then ContinueLoop
ReDim $asFileList[UBound($asFileList) + 1]
$asFileList[0] = $asFileList[0] + 1
$asFileList[UBound($asFileList) - 1] = $sFile
WEnd
FileClose($hSearch)
Return $asFileList
EndFunc

Func _ArrayAdd(ByRef $avArray, $sValue)
If IsArray($avArray) Then
ReDim $avArray[UBound($avArray) + 1]
$avArray[UBound($avArray) - 1] = $sValue
SetError(0)
Return 1
Else
SetError(1)
Return 0
EndIf
EndFunc

Creat0R
17-12-2006, 10:26
amel27стиль для скобок добавил
По прикреплённому файлу (http://forum.oszone.net/attachment.php?attachmentid=3451)...
Архив повреждён или имеет неизвестный формат

По ссылке в посте (http://www.sendspace.com/file/djynqf)...

Sorry, the file you requested is not available.

:(

mpn
17-12-2006, 10:52
Creat0R

Уже перепробовал все варианты. При этом, если если вместо telnet поставить, например, cmd - все работает.

DenchikK
17-12-2006, 12:23
Creat0R
Спасибо большое, но всё равно ошибка выдается:
Local $i, $j, $rlist[1]=[0], $blist, $alist=_FileListToArray ($sPath, '*', 2)
Local $i, $j, $rlist[1] ERROR
Error: No virriable given for "Dim", "Local", "Global" or "Const" statement.

Creat0R
17-12-2006, 16:06
mpn
Уже перепробовал все варианты
Используя ком. строку пробовал?
FileChangeDir("Путь к проге")
Run(@ComSpec, " /c start telnet.exe", "", @SW_HIDE)

DenchikK
ошибка выдается
Какая у тебя версия AutoIt?

DenchikK
17-12-2006, 19:16
Creat0R
Какая у тебя версия AutoIt?
AutoIT версий 3.1.0 и 3.1.1 ставил.
Добавлено:
Всё, спасибо! Заработало! Зашел на сайт - а там версия новее. Скачал - всё замечательно! Ещё раз спасибо!

mpn
18-12-2006, 05:50
Creat0R
Пробовал и с командной строкой. При этом первым запускается процесс cmd.exe, именно он становится доступным для ввода/вывода (последний параметр в команде run =3). Запускающийся следом telnet.exe не принимает команды, отправленные при помощи StdinWrite, даже при правильно указанном PID.
Поясню еще. Программу необходимо запускать в т.ч. и ночью на заблокированном компьютере. Поэтому использование send, отправляющей символы в активное DOS-окно, отпадает. Различные Control.. не работают с такими окнами. Пробовал вместо telnet запускать hyperterm.exe, но при его закрытии (на заблокированном ПК) Windows ругается: "...неизвестная ошибка...", и больше его запускать не хочет. Использование экзотических терминальных программ ограничивает мобильность скрипта.
Выход где-то должен быть!

DenchikK
18-12-2006, 08:34
Creat0R
А можно Вас ещё побеспокоить? Никак не могу изменить скрипт так, чтоб
удалялись несколько файлов, и с нескольких путей. Приходится для
каждого файла и каждого пути писать отдельный скрипт, при компиляции
каждый скрипт начинает весить 180 kb, и несколько - уже весят за 2
мегабайта!
Заранее спасибо!

Creat0R
18-12-2006, 14:16
mpn
А утилиту telnet пробовал ставить в тот же каталог вместе со скриптом? (или наоборот, скрипт в ту папку в которой telnet) - может что-то блокирует запуск программы? файрвол? какие то другие ограничители доступа в сеть?

DenchikK
изменить скрипт так, чтоб
удалялись несколько файлов, и с нескольких путей.
Для каждого файла, добавляй соответственно такой блок кода:


$Path = @ScriptDir & "\имя другого каталога"
$FileName = "имя другого файла.txt"

$DirsList = _DirListToArray ($Path)
For $i = 1 to $DirsList[0]
FileDelete($DirsList[$i] & "\" & $FileName)
Next
FileDelete($Path & "\" & $FileName)


А ещё лучше, если действительно много таких "процедур" нужно делать, создать для этого процесса отдельно функцию:


Func _DeleteFileInFolders($FileName, $Path)
$DirsList = _DirListToArray ($Path)
For $i = 1 to $DirsList[0]
FileDelete($DirsList[$i] & "\" & $FileName)
Next
FileDelete($Path & "\" & $FileName)
EndFunc


И тогда можно использовать её каждый раз при необходимости....



_DeleteFileInFolders("File1.txt", "C:\Dir1")

_DeleteFileInFolders("File2.txt", "C:\Dir2")

_DeleteFileInFolders("File3.txt", "C:\Dir3")

И т.д.



P.S
Функцию поместить в конец скрипта (после трёх существующих функции - _FileListToArray, _ArrayAdd и _DirListToArray).




© OSzone.net 2001-2012