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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты

Закрытая тема
Настройки темы
[архив - Часть 2] AutoIt скрипты

(*.*)


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


Конфигурация

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


Изменения
Автор: Vadikan
Дата: 27-01-2008
Внимание!
Тема переведена в архивное состояние







(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.


Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).
Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).



Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

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

Отправлено: 00:02, 05-02-2006

 

Аватара для Creat0R

Must AutoIt


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

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


amel27,
Спасибо.

По поводу рекурсии...
Всё это хорошо, но на склько известно, есть ограничение на количество вызовов подфункции? можно как то его обойти?

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

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

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


Отправлено: 19:51, 17-10-2007 | #611



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

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


Аватара для Creat0R

Must AutoIt


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

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


Попутный вопрос: Как можно получить число не больше указанного, если как второе число передаёся большее число, но при этом, если всё же передаётся меньшее число, нужно вернуть именно его...

Я это делаю так (надеялся может есть какой-то быстрый метод, используя всякие BitShift/And/Or и т.п.):

Код: Выделить весь код
Func BitNumber($Nmber, $Value)
    If $Value >= $Nmber Then Return $Nmber
    Return $Value
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


Отправлено: 20:26, 17-10-2007 | #612


Пользователь


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

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


Maza Faka,
Цитата:
А зачем постоянно передавать глобальный массив по ссылке? »
...имхо ByRef - более универсальный подход.
Если массив глобальный то ByRef по большому счёту не нужен. Ну а если например нужно передать локальный массив из другой функции...? Т.е тебе каждый раз придётся корректировать эту функцию в зависимости от потребности...

Отправлено: 11:50, 18-10-2007 | #613


Googler


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

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


Maza Faka
Цитата:
Помнишь пример который ты постил для меня »
помню, там не было глобальных данных, поэтому рукурсивная функция возвращала результат ($ret) который передавался "по цепочке" вызовов. В твоем случае в этом нет необходимости.

Цитата:
зачем постоянно передавать глобальный массив по ссылке? »
к примеру если кто другой будет использовать функцию в своей программе со своим именем массива... что проще: поменять имя по всему тексту функции (об этом еще нужно вспомнить!) или указать свое имя в параметре?

Creat0R
Цитата:
есть ограничение на количество вызовов подфункции? можно как то его обойти? »
в общем случае нет... в данном случае это некритично - не встречал каталога на глубине 384 уровня ... особенно если учесть, что весь путь к файлу обычно не больше 255 символов

Цитата:
может есть какой-то быстрый метод »
это и есть самый быстрый, можно сделать короче (одной строчкой) но считаться будет дольше "IF"

Цитата:
используя всякие BitShift/And/Or и т.п
только если $Nmber есть степень двойки, т.е. в двоичном виде есть последовательность "единичек"

Отправлено: 12:08, 18-10-2007 | #614


Аватара для Creat0R

Must AutoIt


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

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


Может кому пригодится (или может кто мне покажет более правильное/простое решение), вот функция для получения числа разделённого запятыми (когда то на батнике пробовал решить, получилось - но кривовато, а тут совсем другое дело )...

Код: Выделить весь код
$MyNumber = 212347525 ;> 212,347,525

MsgBox(64, "Внимание", "Конвертировали обычное число: " & @LF & @LF & _
    $MyNumber & @LF & @LF & _
    "В строку (числовую) разделённую запятыми: " & @LF & @LF & GetComasNumber($MyNumber))

Func GetComasNumber($iNumber)
    $iNumber = Number($iNumber)
    If $iNumber <= 1000 Then Return $iNumber

    Local $iLength = StringLen($iNumber)
    Local $RetStr = '', $iN

    For $i = 1 To $iLength
        $iN = StringMid($iNumber, $i, 1)
        If IsInt(($iLength - $i) / 3) And ($iLength - $i) / 3 > 0 Then
            $RetStr &= $iN & ','
        Else
            $RetStr &= $iN
        EndIf
    Next
    Return $RetStr
EndFunc
amel27,
Цитата:
в общем случае нет
А жаль - Я как раз написал собственный редактор реестра, он правда медленно работает, но полагаю что даже если у кого то и хватит терпения дождаться окончания считывания всех строчек с реестра (у меня не хватает ), то он увидит не полный список, или скрипт выпадет с ошибкой о рекурсивном вызове подфункции.

Цитата:
можно сделать короче (одной строчкой)
О, как это одной строчкой сделать? (скорость не критична в моём случае, проверяться будет вне цикла).

Цитата:
только если $Nmber есть степень двойки, т.е. в двоичном виде есть последовательность "единичек"
У меня число (в этом конкретном случае), всегда 15, т.е нужно проверить, если исло болльше чем 15, то вернуть 15, если меньше, то вернуть то которое меньше (это подходит под критерии сказанного? я просто в математике совсем не силён)... понимаю что решать подобные задачи для конкретного случая нет особого смысла, но мне больше для расширения своего круга знании, вот такие мелочи иногда помагают решить серъёзную проблему.

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

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

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


Отправлено: 12:12, 18-10-2007 | #615


Googler


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

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


Creat0R
Цитата:
А жаль - Я как раз написал собственный редактор реестра
любую рекурсию можно так или иначе заменить на циклы... вот вариант решения задачи для списка каталогов без использования рекурсии:
Код: Выделить весь код
#include <File.au3>
#include <Array.au3>

Global $DirArray[1]
_ArrayAddFileListSubDir($DirArray, "c:\windows")
_ArrayDisplay($DirArray,'')

Func _ArrayAddFileListSubDir (ByRef $aGDir, $sPath = @ScriptDir)
    Local $i = UBound($aGDir), $aLDir = _FileListToArray($sPath, "*", 2)
    _ArrayAddFileList($aGDir, $sPath)
    While $i < UBound($aGDir)
        _ArrayAddFileList($aGDir, $aGDir[$i])
        $i+=1
    WEnd
EndFunc

Func _ArrayAddFileList(ByRef $aGDir, $sPath)
    Local $i, $aLDir = _FileListToArray($sPath, "*", 2)
    If UBound($aGDir, 0)=1 And UBound($aLDir, 0)=1 Then
        For $i = 1 To $aLDir[0]
            _ArrayAdd($aGDir, $sPath & '\' & $aLDir[$i])
        Next
    EndIf
EndFunc
Цитата:
как это одной строчкой сделать?
арифметический вариант _IIF() :
Код: Выделить весь код
$res = ($Value<$Nmber)*$Value + Not($Value<$Nmber)*$Nmber
Цитата:
мне больше для расширения своего круга знании
в такой формулировке одними битовыми операциями все равно не обойтись, поэтому получится еще длиннее... вот если бы $value с каждым шагом изменялось на 1, то отфиксировать переход "границы" можно контролем одного бита... или можно "обрезать" часть старших разрядов... ну и т.д.
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:34, 19-10-2007 | #616


Ветеран


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

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


Корифеи! Кто нибуть реализовал просмотр сети?

Отправлено: 23:10, 22-10-2007 | #617


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
любую рекурсию можно так или иначе заменить на циклы
Ну тут как мне кажется, не так циклы как вызов подфункции играют главную роль.
И кстати, а почему While $i < UBound($aGDir) а не простое использоване For? вроде как разницы нет?

Цитата:
арифметический вариант _IIF()
Супер! Спасибо!

NikLok,
Цитата:
Кто нибуть реализовал просмотр сети?
Полагаю что да.

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

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

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:57, 22-10-2007 | #618


Googler


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

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


Creat0R
Цитата:
не так циклы как вызов подфункции играют главную роль
выделение функций лишь вопрос удобства - можно объединить и в одну
Цитата:
почему While $i < UBound($aGDir) а не простое использоване For?
потому что заранее неизвестно количество элементов массива - они добавляются по ходу прохождения... кстати, у этого способа есть один недостаток по сравнению с рекурсией - результирующий массив не отсортирован по каталогам/подкаталогам
Цитата Creat0R:
Цитата NikLok:
Кто нибуть реализовал просмотр сети?
Полагаю что да.
вы о чем?

Отправлено: 05:01, 23-10-2007 | #619


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
выделение функций лишь вопрос удобства - можно объединить и в одну
Точно, я не присмотрелся поглубже в работу функции...

Цитата:
у этого способа есть один недостаток по сравнению с рекурсией - результирующий массив не отсортирован по каталогам/подкаталогам
Хм... в некоторых случаях довольно весомый недостаток .

Цитата:
вы о чем
Если бы я знал, ответил бы наверное более подробно

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

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

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


Отправлено: 05:30, 23-10-2007 | #620



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход