Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Закладки » AutoIT (Часть 1)

Модерирует : gyra, Maz

Widok (12-01-2009 14:47): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138

   

AddXL

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

AutoIt3

 
Домашняя страница: http://www.autoitscript.com
Страница загрузки: http://www.autoitscript.com/autoit3/downloads.php
 
Описание:

Цитата:
AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя - симуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши и управления окнами и его визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны.
Умеет он очень и очень многое! Бесплатный.

 
Помощь по AutoIT:
  • Справку на русском (и не только) вы всегда(?) сможете найти тут
  • Справочник по командам rundll32
  • Русский справочник по API-функциям
  • Помощь по Регулярным выражениям
  • AutoIt v3: Your Quick Guide (652 КБ) - Ваш быстрый гид в мир AutoIt-а (книга в формате pdf)
     
    Инструметы для AutoIt:
  • AutoIt3Wrapper [Страница закачки] - Программа для компилляции скрипта с дополнительными возможностями (добавление иконки, описании и т.п).
  • Koda (724 Kb) - Визуализация работы с GUI - аналог Visual Basic.
  • CodeWizard (400 Kb) - нечто простенькое на вариант Koda.
  • AutoItMacroGenerator (34 Kb) - Записывает в реальном времени действия пользователя в AutoIt код.
  • ScriptWriter (78 Kb) - Аналог AutoItMacroGenerator.
  • API Constants (1042 Kb) - Утилита для просмотра всех констант API-Функции и не только.
  • Страница закачки утилит которые идут в отдельной поставке редактора SciTE.
  • AutoIt меню для браузера Opera
     
    Готовые скрипты и программы с открытым кодом на AutoIt:
  • Коллекция AutoIt скриптов от Sanja Alone
  • Коллекция скриптов на http://msfn.org
  • Пополняющийся со временем сайт с полезными утилитами и функциями на AutoIt
  • Desktop Icons Restorator - Скрипт-Программа для сохранения/восстановления позиции иконок р.стола.
  • CaptureIt - Утилита предназначена для захвата изображений с вашего экрана.
  • SwitchIt - Скрипт для конвертирования выделенного текста
  • Скрипт расскраски кода AutoIt для публикации в форумах
     
    Общие вопросы и решения на Autoit:
  • Обработчик скриптов добавляющий отладчик (debugger)
  • Интеракция между несколькими скриптами
  • Пример использование интеракции между скриптами - Добавление элементов GUI с внешнего модуля
  • Копирование большого файла с отображением данных прогресса
  • Создание динамического меню в Tray Icon (значёк в области уведомления)
  • Пример создания своего мастера (Wizard)
  • Метод позволяющий запускать код VBS не создавая временных файлов
  • Описание функции GUIRegisterMsg()
  • Пример перехвата вводимых символов с клавиатуры
  • Пример деактивирования TabItem
  • Пример вывода лога в Edit-поле (с поддержкой форматирования текста)
  • Пример остановки/начало выполнения скрипта + Слежение за б.обмена с заменой неподдерживаемых в имени файла символов
  • Пример использования меню с иконками (ModernMenu.au3) -> Список программ в меню значка в системном трее
     
  • Как по PID процесса вычислить путь запускаемого файла
  • Получение IP по подключенному сокету
     
    Отдельные функции (UDF):
  • Функции Отключения/Подключения к Интернету
  • Функция проверки подключения к Интернету
  • Функция для получения структуры директории включая подкаталоги
  • Функция для поиска в файлах
  • Функция для смены разрешения экрана
  • Функция для смены раскладки клавиатуры в определённом окне
  • Функция для получения списка процессов с допол. инфой (путь к исполняемому файлу и др.)
  • Функции и пример для отображения детального процесса закачки файла
  • Функция (и пример использования) для отображения стильного диалога “О Программе” - [Усовершенствованная версия]
  • Функция возвращает пронумерованный список всех классов определённого окна + функция получения хендлов для этих классов
  • Функция для получения заголовка окна (или его идентификатора) по ID процесса (PID)
  • Функция _StringIsUTF8Format() + _StringToUTF() - Первая проверяет если строка содержится в UTF-8 формате, вторая преобразовывает строку в UTF-8 формат
  • Функция _FileOpenDialogEx - Возвращает массив (или строку) с полными путями к выбранным файлам
  • _AU3_Lib* Функции - Предназначены для обработки подключаемых библиотек через #include
  • Функция транслитерации строки
  • Расширенная библиотека для работы с реестром
     
    За шапкой следит ViSiToR  

  • Всего записей: 6 | Зарегистр. 24-11-2005 | Отправлено: 13:20 24-11-2005 | Исправлено: Maz, 11:50 17-04-2017
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Inquisition 21:54 14-11-2008
    Цитата:
    что же тут не так с функцией CombatCheck()

    Проблема не в ней, проблема в том что функция Start() при разных условиях запускает саму себя (получается тяжёлая рекурсия), и видимо никак не дойдёт то вызова CombatCheck(). Так скрипт писать не практично, нужен другой подход (повесить главные проверки в тело цикла, и запускать нужные функции отдельно).
     
    Mister_Che 22:19 14-11-2008
    Цитата:
    пустой цикл выполняется только во время паузы?

    Тут как раз наоборот, в самом начале цикл без паузы, в момент паузы скрипт войдёт в цикл который в функции TogglePause(), а если в первом цикле используется код с паузами, тогда всё нормально
     

    Цитата:
    можно ли убрать строки с ConsoleWrite без потери функциональности?

    Конечно, они там только для вывода данных в консоль (обычно используется в целях отладки).

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 23:10 14-11-2008 | Исправлено: ViSiToR, 23:15 14-11-2008
    Z4masko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, а спомобна ли эта программа атоматизировать действия во Flash роликах на Web сайтах  ?  

    Всего записей: 735 | Зарегистр. 05-11-2004 | Отправлено: 23:16 14-11-2008
    Inquisition

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ну вобщето скрипт идет до конца, то есть выполняет все вплоть до $Middle5. Ну уж поверю вам наслово, вопрос в том как мне это сделать? то есть как мне повесить главные проверки в тело цикла, и запускать нужные функции отдельно? Вы имеете ввиду убрать Start() ? Но тогда суть скрипта исчезнет... то есть весь принцип скрипта начинать с начала если произошло некое действие описаное функцией CombatCheck() (к примеру)

    Всего записей: 10 | Зарегистр. 14-11-2008 | Отправлено: 23:22 14-11-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Z4masko 23:16 14-11-2008
    Цитата:
    атоматизировать действия во Flash роликах на Web сайтах  ?  

    Скорее всего что нет.
     
    Inquisition 23:22 14-11-2008
    Цитата:
     скрипт идет до конца, то есть выполняет все вплоть до $Middle5

    Тогда как определяется что функция CombatCheck() не запускается? возможно ради проверки стоит добавить в её начало MsgBox:
     

    Код:
    Func CombatCheck()
         MsgBox(0, "", "Ok, function started")
         .....
    EndFunc

     

    Цитата:
    весь принцип скрипта начинать с начала если произошло некое действие описаное функцией CombatCheck()

    Любое действие можно повесить на отдельную функцию. В текущем виде это очень не стабильно, вот примерно нужно так (я тут вместо рекурсивного вызова функции, просто завершаю её, она сама запускается по новой в цикле):
     

    Код:
     
    ;Activate window and wait till it's opened (actualy till it's *Active* ).
    WinActivate("Легенда: Наследие Драконов")
    WinWaitActive("Легенда: Наследие Драконов")
     
    ;1=absolute, 0=relative, 2=client
    Opt("MouseCoordMode", 0)
    Opt("PixelCoordMode", 0)
     
    ;Declare variable
    Global $Runner
     
    ;Mouse positions for moving to random map
    Global $Array[5] = ["", "414,223", "471,233", "528,220", "470,204"]
     
    ;On/Off the Main_Proc() & Exit the script
    HotKeySet("{ESC}", "Terminate")
    HotKeySet("{F9}", "ShowMe")
     
    ;Главный цикл
    While 1
        Sleep(100)
     
        Main_Proc()
    WEnd
     
    Func
    ShowMe()
        $Runner = Not $Runner
    EndFunc
     
    ;If Esc is clicked then Exit the script
    Func Terminate()
        Exit
    EndFunc
     
    Func
    CombatCheck()
        MsgBox(262144+64, @ScriptName, "OK, Func CombatCheck() has started." & @CRLF & @CRLF & "Press <OK> to continue.")
     
        Sleep(3000)
     
        $CombatCheck = PixelSearch(352, 365, 353, 366, 0x7AB800, 1)
     
        If IsArray($CombatCheck) Then
            MouseClick("Left", 381, 426)
            Sleep(1000)
            MouseClick("left", 511, 455)
            Sleep(300)
            MouseClick("left", 511, 441)
            Sleep(300)
            MouseClick("left", 511, 408)
            Sleep(10000)
     
            ;Main_Proc() ;Not needed, the loop will call the function
        EndIf
    EndFunc

     
    ;The main bot
    Func Main_Proc()
        If Not $Runner Then Return ;Return if script is paused
     
        ;Look for monster

        $Coord = PixelSearch(129, 261, 858, 490, 0xfa6541)
     
        ;If monster found, click on its coords
        If IsArray($Coord) Then MouseClick("Left", $Coord[0], $Coord[1] - 1)
     
        ;If monster not found, move to random map
        If Not IsArray($Coord) Then
            $Random = Random(1, 4, 1)
            $Split = StringSplit($Array[$Random], ",")
            MouseClick("Left", $Split[1], $Split[2])
     
            ;Exit the function (look for monster)
            Return
        EndIf

     
        ;START combat
        MouseClick("Left", 289, 230)
     
        Sleep(1000)
     
        ;If combat with that monster already started, leave and restart script
        $FightCheck = PixelSearch(309, 250, 310, 251, 0x0054e3, 2)
     
        If IsArray($FightCheck) Then
            MouseClick("Left", 525, 520)
     
            ;Exit the function
            Return
        EndIf

     
        CombatCheck()
     
        ;Combat script | Search for attack button, click it, move on to next attack
        Do
            Sleep(100)
            $Bottom1 = PixelSearch(352, 456, 353, 457, 0x68181b, 3)
        Until IsArray($Bottom1)
     
        If IsArray($Bottom1) Then MouseClick("Left", $Bottom1[0], $Bottom1[1] - 1)
     
        CombatCheck()
     
        Do
            Sleep(100)
            $Upper1 = PixelSearch(328, 377, 329, 378, 0x68181b, 12)
        Until IsArray($Upper1)
     
        If IsArray($Upper1) Then MouseClick("Left", $Upper1[0], $Upper1[1] - 1)
     
        CombatCheck()
     
        Do
            Sleep(100)
            $Upper11 = PixelSearch(328, 377, 329, 378, 0x68181b, 12)
        Until IsArray($Upper11)
     
        If IsArray($Upper11) Then MouseClick("Left", $Upper11[0], $Upper11[1] - 1)
     
        CombatCheck()
     
        Do
            Sleep(100)
            $Middle1 = PixelSearch(357, 429, 358, 430, 0x731111, 15)
        Until IsArray($Middle1)
     
        If IsArray($Middle1) Then MouseClick("Left", $Middle1[0], $Middle1[1] - 1)
     
        CombatCheck()
    EndFunc


    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 00:02 15-11-2008 | Исправлено: ViSiToR, 00:04 15-11-2008
    Inquisition

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как я уже писал в предыдущем посте MsgBox() уже пробовал, безуспешно. Сейчас очень поздно и я лягу спать, как только проснусь просмотрю ваш скрипт.

    Всего записей: 10 | Зарегистр. 14-11-2008 | Отправлено: 00:06 15-11-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mister_Che

    Цитата:
    Объясни, пожалуйста, что написал этот человек?

    Visitor мне указал, что в пустой цикл While $Paused ... Wend обязательно должна быть быть вставлена команда Sleep, чтобы скрипт, войдя в него во время паузы, не бегал слишком быстро по нему, разогревая впустую процессор. Я эту вещь сделал опциональной - сказал, что можешь Sleep включать, можешь и нет. А Visitor сказал, что Sleep обязателен. Ну, я и поправил код.

    Цитата:
    Там была такая строка: "ConsoleWrite", а ведь если кем-то было записано, то оно когда-нибудь будет и прочитано, а мне излишнее внимание не нужно.

    Команды ConsoleWrite вставлены только в демонстрационных целях, иначе как в приведеном примере сообразишь, находится ли скрипт в главном цикле While 1 ... Wend или в цикле паузы While $Paused ... Wend? Можешь спокойно их убрать.

    Цитата:
    А что будет, если поставить в этом пустом цикле Sleep на минуту, скажем?

    Это значит, что при нажитии клавишы Pause скрипт войдет в цикл While $Paused ... Wend и заснет в нем на минуту. Т.е. если ты повторно нажмешь Pause тебе придется ждать до целой минуты пока скрипт проснется и выйдет из паузы. Сейчас стоит Sleep(50) - т.е. скрипт в пустом цикле спит только 50 мсек. , т.е. для человека такая задержка выхода из паузы малозаметна. Можно и уменьшить до Sleep(10)
     

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 01:34 15-11-2008
    Inquisition

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Форум опять заработал! Ура!
     
    Все по порядку.  
     
    №1 Я запустил ваш скрипт, он работает (MsgBox() вызывается в нужный момент времени)  
    №2 Я убрал строку MsgBox() и запустил скрипт, не работает (Функция не вызывается, скрипт доходит до конца)  
    №3 Я запустил функцию отдельно от скрипта (В новом файле)  

    Код:
    Func CombatCheck()  
     
    Sleep(3000)  
     
    $CombatCheck = PixelSearch(352, 365, 353, 366, 0x7AB800, 1)  
     
    If IsArray($CombatCheck) Then  
    MouseClick("Left", 381, 426)  
    Sleep(1000)  
    MouseClick("left", 511, 455)  
    Sleep(300)  
    MouseClick("left", 511, 441)  
    Sleep(300)  
    MouseClick("left", 511, 408)  
    Sleep(10000)  
     
    ;Main_Proc() ;Not needed, the loop will call the function  
    EndIf  
    EndFunc  

    все работает замечательно, а это также означает, что PixelSearch работает как надо.  
    №4 Я упорно с разбега бью голову о стену, в надежде, что пойму как это работает.  
     
    Помогите пожалуйсто, голова болит

    Всего записей: 10 | Зарегистр. 14-11-2008 | Отправлено: 16:23 15-11-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Inquisition 16:23 15-11-2008
    Цитата:
    Я убрал строку MsgBox() и запустил скрипт, не работает (Функция не вызывается, скрипт доходит до конца)  

    Функция вызывается, просто видимо то что в ней, не происходит так как ожидается. MsgBox может на это влияет, т.к он задерживает скрипт пока его не закрыть.
     
    P.S
    В подобных скриптах есть много факторов влияющих на ход действии, поэтому нужно проверять всё на деле, чего я естественно, сделать немогу .

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 16:43 15-11-2008
    Inquisition

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Извиняюсь за дерзость, возможно вы сможете скачать ту самую игру для которой я этот бот делаю? В целях проверки скрипты разумеется! Клиент весит всего 2.5 мегабайта (если скачивать без музыкы и дополнительных изображений), что вполне демократично.
     
     
    #Edit: Появилась идея нахрен убрать эту функцию и добавить, что-то вроде EndIf (Попыток PixelSearch болье 50) Но как это сделать не понятно. Если через $i=i+1 то глобальная переменная $i после первого раза изменится и потом всегда будет >50.

    Всего записей: 10 | Зарегистр. 14-11-2008 | Отправлено: 17:24 15-11-2008 | Исправлено: Inquisition, 21:28 15-11-2008
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Судя по этому топику http://www.autoitscript.com/forum/index.php?showtopic=55546 для того чтобы работали почти все ф-и _IE* нужно чтобы был запущен шелл (explorer.exe) для того юзера.
     
    Я пробовал это:

    Цитата:
    $start = RunAs('user', @ComputerName, 'password', 1, @WindowsDir & '\explorer.exe', @UserProfileDir)

     
    с разными параметрами рабочих директорий - без толку. Explorer.exe появляется в процессах на мгновение и бесследно исчезает.
     
    Как запустить шелл другого юзера? В основном, мне нужно чтобы отрабатывали эти функции: _IEBodyReadText() и _IEQuit()

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 07:41 16-11-2008
    Maza_Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    timsky

    Цитата:
    Explorer.exe появляется в процессах на мгновение и бесследно исчезает

    А если убить текущий процесс Explorer.exe перед запуском нового?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 09:06 16-11-2008
    gal7

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня есть вопрос-можно ли как-нибудь БЫСТРО выходить из больших функций например при ошибках? Раньше, насколько я понял был goto, но потом его убрали. Конечно, можно постоянно проверять на ошибки практически после каждой строки, но такое решение в больших функциях не очень приятно делать... Смотрел установку обработчика событий ошибок, но и это не способно дать быстрый выход из функций, где например произошла такая ошибка. В идеале для моих целей лучше всего был бы произвольный переход на любую указанную строку сценария, но судя по-всему таким и не пахнет. Других решений не существует?

    Всего записей: 145 | Зарегистр. 03-06-2007 | Отправлено: 14:12 16-11-2008
    Maza_Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    gal7

    Цитата:
    Конечно, можно постоянно проверять на ошибки практически после каждой строки

    Практически, так и делается, а для выхода из функции используется Return

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:44 16-11-2008
    gal7

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Практически, так и делается, а для выхода из функции используется Return

    Да, это я знаю. Я имел ввиду, что если например постоянно проверять на ошибки каким-либо способом(например, обработчик ошибок или вызов AdlibEnable), то Return вызовет выход из этой функции обработчика, но не из функции, где произошла ошибка...

    Всего записей: 145 | Зарегистр. 03-06-2007 | Отправлено: 14:50 16-11-2008
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    А если убить текущий процесс Explorer.exe перед запуском нового?

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

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 15:06 16-11-2008
    Maza_Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    gal7
    Выложи небольшой пример отображающий твою проблему.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:32 17-11-2008
    gal7

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Выложи небольшой пример отображающий твою проблему

    Небольшой пример:

    Код:
    AdlibEnable("prov_na_oshibki", 20)
    fukciya_s_oshibkoy()
    ;+Всякие другие функции далее
    While 1
       sleep(50)
    WEnd
     
    Func fukciya_s_oshibkoy();Функция в которой произошла ошибка
       ;...
       SetError(1);Здесь до этого произошли какие-либо действия, вызвавшие ошибку(это симулирует SetError (1))
       ;...
    EndFunc
    Func prov_na_oshibki();Вызывается постоянно и проверяет на ошибки
       If @error <> 0 Then
          ;Здесь должно что-то делаться, чтобы как-то выйти из функции fukciya_s_oshibkoy(), если там ошибка
       EndIf
    EndFunc

     
     
    Здесь я показал так, как я знаю, но этот способ не подходит по той причине, что я не знаю возможно ли вызывать выход из функции fukciya_s_oshibkoy() напрямую с помощью prov_na_oshibki(). Был бы goto, такой проблемы не было бы. А вообще мне нужно например для таких ситуаций:
    При любой ошибке мне нужно не заканчивая программу вернуться к ее исходному состоянию. Простейший способ который я знаю это постоянные If-ы+ Return  почти после каждой функции, но ведь он не очень простой, точнее трудоемкий. Если скрипты маленькие и их мало, то это не проблема, а мне нужно делать много однотипных достаточно сложных скриптов чуть ли не конвеером, поэтому я и думаю как упростить хотя бы работу с ошибками в программе. Было бы еще лучше, если простым способом можно было бы выходить в указанное место программы (изначально я про это и искал, а не про выходы при ошибках, и найти про это было самое важное для меня, но судя по всему это невозможно), а не только просто из данной функции с ошибкой.

    Всего записей: 145 | Зарегистр. 03-06-2007 | Отправлено: 10:44 17-11-2008 | Исправлено: gal7, 10:50 17-11-2008
    Maza_Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    gal7

    Цитата:
    Простейший способ который я знаю это постоянные If-ы+ Return  почти после каждой функции

    Он же и самый правильный Честно говоря не вижу другого способа отлова ошибок, как проверять возвращаемый результат каждой функции
    Ну вот например извращённый пример отлова ошибок:

    Код:
     
    Global $Error = False
     
    AdlibEnable("prov_na_oshibki", 20)
     
    fukciya_s_oshibkoy()
     
    ;+Всякие другие функции далее
     
    While 1
        Sleep(50)
    WEnd
     
    Func fukciya_s_oshibkoy();Функция в которой произошла ошибка
        ;...
        ;SetError(1);Здесь до этого произошли какие-либо действия, вызвавшие ошибку(это симулирует SetError (1))
        ;...
        DriveGetDrive("UNKNOWN")
        If @error Then $Error = True
    EndFunc   ;==>fukciya_s_oshibkoy
     
    Func prov_na_oshibki();Вызывается постоянно и проверяет на ошибки
        If $Error <> 0 Then
            $Error = 0
            ;Здесь должно что-то делаться, чтобы как-то выйти из функции fukciya_s_oshibkoy(), если там ошибка
        EndIf
    EndFunc   ;==>prov_na_oshibki
     

    Главный недостаток такого метода в том, что не все функции устанавливают Error code, а возвращают 1 или 0. Что касается команды GoTo, то не вижу необходимости в ней, недаром её исключили из AutoIt-a.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:38 17-11-2008
    lex83_2002

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребят, подскажите как обрезать слово справа до символа "#" , либо заменить все после символа # на пустой символ
     
    Добавлено:
    Ребят, как в слове обрезать все после  символа # ?
     
    Разобрался !

    Всего записей: 6 | Зарегистр. 05-11-2007 | Отправлено: 11:38 17-11-2008 | Исправлено: lex83_2002, 12:33 17-11-2008
    gal7

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Главный недостаток такого метода в том, что не все функции устанавливают Error code, а возвращают 1 или 0.

    Ладно, буду "по-старинке" делать, ничего не остается.

    Цитата:
    Что касается команды GoTo, то не вижу необходимости в ней, недаром её исключили из AutoIt-a

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

    Всего записей: 145 | Зарегистр. 03-06-2007 | Отправлено: 12:14 17-11-2008
       

    Страницы: 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138

    Компьютерный форум Ru.Board » Компьютеры » Программы » Закладки » AutoIT (Часть 1)
    Widok (12-01-2009 14:47): лимит страниц. продолжаем здесь


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru