Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: ViSiToR
Дата сообщения: 02.07.2007 21:40
RwR

Цитата:
Имя окна пост. меняется

А где интересно в моём примере, указано имя окна?

AutoIt в работе с окнами, идеальное средство, даже если требуется скрыть окно, и даже если не известно его полное имя (заголовок), и даже если заголовок вовсе не известен (а только путь к программе, или текст в окне)...
Автор: Maza Faka
Дата сообщения: 03.07.2007 07:38
ViSiToR

Цитата:
Ubound

Что означает эта команда?
Автор: Elroir
Дата сообщения: 03.07.2007 11:03
Maza Faka

Цитата:

UBound
--------------------------------------------------------------------------------
Вернуть размер размерности массива.

UBound ( Array [, Dimension] )

Параметры:
Array Название массива.
Dimension [опциональный] Индекс размерности для многомерных массивов. Стандартное значение равно 1. Если этот параметр равен 0, то возвращается количество размерностей массива.

Возвращаемое значение:
Успешное выполнение: Размер размерности массива.
Ошибка: Значение 0 и @error равно:
1 = если указанная переменная не массив .
2 = если указанная размерность массива отсутствует.

Замечания:
Отметим, что значение, возвращаемое UBound на единицу больше индекса последнего элемента!


Автор: ViSiToR
Дата сообщения: 03.07.2007 15:36
Maza Faka

Цитата:
Что означает эта команда?

В добавок к приведённому описанию by Elroir...

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

$TypesArr[0]

Но бывает что самодельные функции (UDF - User Defined Function), помещают одно из значении сразу в нулевой элемент массива, либо вовсе пропускают его, и тогда он пуст и не содержит данных.. вот тут нам и помагает встроенная функция Ubound, т.е к примеру имеем такой массив:

Dim $Array[4]
$Array[0] = ""
$Array[1] = "Элемент 1"
$Array[2] = "Элемент 2"
$Array[3] = "Элемент 3"

Теперь проверять $Array[0] для получения общего числа элементов нет смысла, поэтому проверяем так:


Код: $TotalElements = Ubound($Array)-1 ;Переменная $TotalElements ровняется 3, потому как первый элемент мы отняли, он нам не нужен (если он содержит данные тогда не используем -1).
Автор: Maza Faka
Дата сообщения: 03.07.2007 16:53
ViSiToR
Можно и так перечислить:

Код:
Dim $array[3] = ["*.bmp", "*.cfg", "*.dem"]
For $var In $array
MsgBox(64, "", $var)
Next
Автор: RwR
Дата сообщения: 03.07.2007 20:36
Как сделать так, чтобы *.exe файл AutoIt скрипта после исполнения сам себя удалил? Он ведь так просто не удалится, я прав?
Автор: ViSiToR
Дата сообщения: 03.07.2007 21:20
Maza Faka

Цитата:
Можно и так перечислить:

Можно, но иногда не удобно (когда нужно использовать теущий номер элемента для других целей).

RwR

Цитата:
Как сделать так, чтобы *.exe файл AutoIt скрипта после исполнения сам себя удалил?


В конце скрипта прописать..
FileDelete(@ScriptFullPath)

Если не получается тогда через ком. строку:


Код: $ScriptPath = FileGetShortName(@ScriptFullPath)
Run(@ComSpec & ' /c ping -n 1 localhost > nul & del /q /f "' & $ScriptPath & '"', '', @SW_HIDE)
Exit
Автор: RwR
Дата сообщения: 03.07.2007 22:48
Если
Цитата:
FileDelete(@ScriptFullPath)
прописывать в файле *.au3, то работает, а если *.exe, то нет.
Цитата:
Если не получается тогда через ком. строку:


Код:$ScriptPath = FileGetShortName(@ScriptFullPath)
Run(@ComSpec & ' /c ping -n 1 localhost > nul & del /q /f "' & $ScriptPath & '"', '', @SW_HIDE)
Exit

Можно поподробнее?
Автор: ViSiToR
Дата сообщения: 03.07.2007 23:20
RwR

Цитата:
Можно поподробнее?


Подробнее чем я написал вроде не бывает

Просто поставь этот кусок кода в конец скрипта, при завершении екзешник будет удалён.
Автор: RwR
Дата сообщения: 04.07.2007 00:01

Цитата:
при завершении екзешник будет удалён
не удаляется. Почему?
Автор: ViSiToR
Дата сообщения: 04.07.2007 00:27
RwR

Цитата:
не удаляется. Почему?

Содержание скрипта Test.au3:


Код: MsgBox(64, "", "Сейчас эта программа себя уничтожит ", 3)

$ScriptPath = FileGetShortName(@ScriptFullPath)
Run(@ComSpec & ' /c ping -n 1 localhost > nul & del /q /f "' & $ScriptPath & '"', '', @SW_HIDE)
Exit
Автор: RwR
Дата сообщения: 04.07.2007 01:06
Заработало. Спасибо большое. Хотя вроде всё так и оставил, ничего не менял...
Автор: ViSiToR
Дата сообщения: 04.07.2007 01:06
(Небольшая) Библиотека для работы с заголовками окон и процессами
Автор: NIKZZZZ
Дата сообщения: 04.07.2007 15:11
В Autoit есть функция "ConsoleWrite", однако она не работает с DOS консолью. Каким образом можно обойти это ограничение?
Автор: ViSiToR
Дата сообщения: 04.07.2007 21:05
NIKZZZZ

Цитата:
Каким образом можно обойти это ограничение?

Это не ограничение - Команда ConsoleWrite() предназначена исключительно для отладки (Debug), выводит в консольном окне редактора (поддерживаемый чтение потока текста) заданный текст/переменную.

Для работы с консольным окном Dos, используется StdoutRead(), StdInWrite(), чтобы скрипт на выходе возвращал значения (к примеру для использования как консольной утилиты), достаточно задать это значение после команды Exit (1).
Автор: RwR
Дата сообщения: 04.07.2007 22:23
Возможно ли получить из ресстра значение,(это будет путь к папке) и использовать это значение в качестве пути при копировании файлов?
Автор: kpuk
Дата сообщения: 05.07.2007 07:49
RwR
Канеш
ПОчитай про RegRead ( "keyname", "valuename" )
Автор: NIKZZZZ
Дата сообщения: 05.07.2007 08:03
ViSiToR
Не совсем понятно. StdInWrite() требует идентификатор процесса (в данном случае cmd.exe, который уже запущен).
Нельзя ли привести пример консольной утилиты, выводящей какой-либо текст в DOS консоль?

Автор: Maza Faka
Дата сообщения: 05.07.2007 13:29
Абстрактная задача: пройтись рекурсивно, по диску "C:\" и выдать на экран имена пустых папок. Возможно ли такое?
Автор: RwR
Дата сообщения: 05.07.2007 14:05

Цитата:
ПОчитай про RegRead ( "keyname", "valuename" )
. Почитал. Как теперь из той папки, которая $var скопировать в другую? И какие пути AutoIt пользует вместо Виндосовких %tmp%, %UserProfile%? Очень нужно сделать чтобы из папки $var копировалось в папку %tmp%\ess_rus.
Автор: Dobrii
Дата сообщения: 05.07.2007 15:04
Опять я.
У меня в файл пишутся цифровые данные (FileWriteLine("C:\scrcnc\temp.cnc",$s[$i])) в формате
X.XXX , т.е должно быть 3 знака после запятой. Как сделать так, чтобы целое число записывалось с 3 знаками? К примеру так : 2.000

Автор: Maza Faka
Дата сообщения: 05.07.2007 16:03
RwR

Код:
$var = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Program", "InstallDir")
FileCopy($var & "\*.*", @TempDir & "\ess_rus")
Автор: NIKZZZZ
Дата сообщения: 05.07.2007 16:06
Maza Faka

Цитата:
пройтись рекурсивно, по диску "C:\" и выдать на экран имена пустых папок.


Код: $Result=""
dirnul("c:")
msgbox(4096,"",$result)

func dirnul($path)
local $file
local $search
$search = FileFindFirstFile($path & "\*.*")
While 1
$file = FileFindNextFile($search)
If @error Then return ;endif
$file=$path & "\" & $file
if StringInStr(FileGetAttrib($file),"D") > 0 then
if DirGetSize($file)=0 then
$Result&=$file & @crlf
endif
dirnul($file)
endif
WEnd
endfunc
Автор: ViSiToR
Дата сообщения: 05.07.2007 16:36
NIKZZZZ

Цитата:
Нельзя ли привести пример

А чем плох пример из справки:


Код: ; Demonstrates the use of StdinWrite()
#include <Constants.au3>

$foo = Run("sort.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
; Write string to be sorted to child sort.exe's STDIN
StdinWrite($foo, "rat" & @CRLF & "cat" & @CRLF & "bat" & @CRLF)
; Calling with no 2nd arg closes stream
StdinWrite($foo)

; Read from child's STDOUT and show
MsgBox(0, "Debug", StdoutRead($foo))
Автор: NIKZZZZ
Дата сообщения: 05.07.2007 16:47
ViSiToR

Цитата:
А чем плох пример из справки:

С выводом кода ошибки проблем нет, но этот пример не выводит текст в DOS консоль, а это очень неудобно для консольных утилит.

Автор: Maza Faka
Дата сообщения: 05.07.2007 16:49
NIKZZZZ
Красиво, только не понятна эта строка:
If @error Then return

ViSiToR
Твой пример сложноват для понимания
Автор: NIKZZZZ
Дата сообщения: 05.07.2007 16:55
Maza Faka

Цитата:
Красиво, только не понятна эта строка:
If @error Then return

FileFindNextFile($search) возвращает ошибку, если не находит следующего файла (поиск закончен).
Да, пример ищет не пустые каталоги, а каталоги нулевого размера, немного ошибся.

Автор: ViSiToR
Дата сообщения: 05.07.2007 17:17
Maza Faka

Цитата:
Твой пример сложноват для понимания

Была поставлена задача, я привёл пример её решения, а не лекбиз по способу её написания

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

NIKZZZZ
После открытия потока для поиска файлов (FileFindFirstFile), следует их закрывать, иначе при достижении определённого ограничения (кажется 64 одновременных открытии), скрипт вывалится с ошибкой.... хотя вроде в последних версиях это ограничение сняли...


Цитата:
пример ищет не пустые каталоги, а каталоги нулевого размера

Это может также занять дольше времени, так как если папки будут большие, то узнавая размер папки проходит время .... FileFindFirstFile возвращает -1 если папка пуста или не найден заданый файл (если задаём *.* то в нашем случае папка пуста), но можно конечно проверять @error = 1, тогда только "папка пуста".
Автор: NIKZZZZ
Дата сообщения: 05.07.2007 17:33

Цитата:
следует их закрывать

Невнимательность

Код: $Result=""
dirnul("c:")
msgbox(4096,"",$result)

func dirnul($path)
local $file
local $search
$search = FileFindFirstFile($path & "\*.*")
While 1
$file = FileFindNextFile($search)
If @error Then
FileClose($search)
return
endif
$file=$path & "\" & $file
if StringInStr(FileGetAttrib($file),"D") > 0 then
$size=DirGetSize($file,1)
if $size[1]=0 then
$Result&=$file & @crlf
else
dirnul($file)
endif
endif
WEnd
endfunc
Автор: Maza Faka
Дата сообщения: 05.07.2007 17:40
ViSiToR

Цитата:
Была поставлена задача, я привёл пример её решения, а не лекбиз по способу её написания

Ты прав, просто ты используешь 2 библиотеки, а нельзя ли без них? И ещё, вызывается функция:

"$RetArr = ReturnEmptyDirs("c:")"
Func ReturnEmptyDirs($sPath)

Что происходит в скобках, присвоение переменной $sPath значение "c:"?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.