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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 | Цитировать | Сообщить модератору
    telyakov 20:04 11-09-2008
    Цитата:
    Как получить hwnd окна по pid процесса?

     
    Так:
     

    Код:
     
    ;GUI to check the function
    $hGUI = GUICreate("Our GUI")
    GUISetState()
     
    $aWindow = _ProcessGetWindow(@AutoItPID)
     
    MsgBox(64, "Results", _
        StringFormat("Win Title \t\t\t= %s \nWin Handle \t\t= %s\nOriginal Win Handle \t= %s", $aWindow[0], $aWindow[1], $hGUI))
     
    Func _ProcessGetWindow($iPID)
        Local $aWinList = WinList()
        Local $aRet[2]
     
        If IsString($iPID) Then $iPID = ProcessExists($iPID)
     
        For $i = 1 To UBound($aWinList)-1
            If WinGetProcess($aWinList[$i][1]) = $iPID Then
                $aRet[0] = $aWinList[$i][0] ;Title
                $aRet[1] = $aWinList[$i][1] ;WinHandle
     
                Return $aRet
            EndIf
        Next
     
        Return
    SetError(1, 0, $aRet)
    EndFunc


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 23:03 11-09-2008
    Maza Faka



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

    Цитата:
    Есть функция Assign - создает переменные по имени.

    Вообще-то не создаёт,  а присваивает значения

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:57 12-09-2008
    alex832008

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

    Цитата:
     
     
    Цитата:Есть функция Assign - создает переменные по имени.  
     
    Вообще-то не создаёт, а присваивает значения  
     

     
    Assign мне помогла ) Но вот можно ли создавать переменные по именам ?

    Всего записей: 13 | Зарегистр. 11-09-2008 | Отправлено: 11:53 12-09-2008 | Исправлено: alex832008, 11:55 12-09-2008
    telyakov



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Вопрос Телякова Алика:

    Цитата:
    Как получить hwnd окна по pid процесса ?

     
    Ответ ViSiToRа a.k.a CreatoR:
    CreatoR это не ник, CreatoR это стиль жизни!

    Цитата:
    Так:

    Код:
     
    ;GUI to check the function
    $hGUI = GUICreate("Our GUI")
    GUISetState()
     
    $aWindow = _ProcessGetWindow(@AutoItPID)
     
    MsgBox(64, "Results", _
        StringFormat("Win Title \t\t\t= %s \nWin Handle \t\t= %s\nOriginal Win Handle \t= %s", $aWindow[0], $aWindow[1], $hGUI))
     
    Func _ProcessGetWindow($iPID)
        Local $aWinList = WinList()
        Local $aRet[2]
     
        If IsString($iPID) Then $iPID = ProcessExists($iPID)
     
        For $i = 1 To UBound($aWinList)-1
            If WinGetProcess($aWinList[$i][1]) = $iPID Then
                $aRet[0] = $aWinList[$i][0] ;Title
                $aRet[1] = $aWinList[$i][1] ;WinHandle
     
                Return $aRet
            EndIf
        Next
     
        Return
    SetError(1, 0, $aRet)
    EndFunc

     

     
    Огромное Спасибо!
     
    Всё работает!!!
     
    Я уже пользовался Вашей библиотекой  
    "Библиотека для работы с заголовками окон и процессами 1.0"
    с http://creator-lab.ucoz.ru/load/3-1-0-19
     
    Быстро учусь благодаря замечательным учителям!!!
    Поздравляю с Днём программиста! 256 день в году!
     
     
    С уважением Алик Теляков...

    Всего записей: 14 | Зарегистр. 12-03-2008 | Отправлено: 11:57 12-09-2008 | Исправлено: telyakov, 13:11 12-09-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka 07:57 12-09-2008
    Цитата:
    Вообще-то не создаёт,  а присваивает значения

    Ну почему, и создаёт тоже, ведь если переменная не объявлена, то Assign() её объявляет (если не использовать в качестве последнего параметра 4).
     

    Код:
     
    Assign("Var", "Some Value", 2)
    ConsoleWrite($Var)


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 12:20 12-09-2008
    Loopback



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В продолжение недавней дискуссии о запуске скрипта как сервис: на оффоруме выложили UDF для запуска без дополнительных костылей:
     
    http://www.autoitscript.com/forum/index.php?showtopic=80201
     
    Проверил - отлично работает.

    Всего записей: 174 | Зарегистр. 08-03-2002 | Отправлено: 12:46 12-09-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пытаюсь делать мастер
     
    Проблема со вторым окном - необходимо чтобы если в элементах Input ничего нет, рядом появлялась бы иконка NotOk.ico (крестик), иначе - иконка Ok.ico (галочка) Сейчас так и есть, только иконки эти некрасиво мерцают - это понятно, т.к. перерисовываются бесконечно. Можно ли уйти от этого мерцания? Если ввести Sleep (100), то начинают резко тормозить переходы по кнопкам Назад Далее. Также нужно, если высвечена хоть одна иконка NotOk.ico, конпка далее стала бы недоступна. заранее Спасибо всем ответившим.
     
     

    Код:
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
     
    ; Устанавливаем иконки
    FileInstall("Resources\Ok.ico", "Ok.ico")
    FileInstall("Resources\NotOk.ico", "NotOk.ico")
     
     
    ;Рисуем главное окно
    $Main_GUI = GuiCreate("Мастер создания настроек", 500, 360, (@DesktopWidth-500)/2, (@DesktopHeight-300)/2)
    _GUICtrlCreateSeperator(0, 2, 320, 3, 496)
    ; Рисуем кнопки
    $Back_Button = GUICtrlCreateButton("< Назад", 240, 327, 80)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Next_Button = GUICtrlCreateButton("Далее >", 320, 327, 80)
    $Exit_Button = GUICtrlCreateButton("Выход", 410, 327, 80)
     
     
    ;Рисуем первый диалог мастера
    $ChildGui_1 = GUICreate("", 493, 300, 1, 1, $WS_POPUP)
    DllCall("user32.dll", "int", "SetParent", "hwnd", $ChildGui_1, "hwnd", $Main_GUI) ; помещаем диалог в главное окно
    $Label1_1_1 = GuiCtrlCreateLabel("Этот мастер создания настроек последовательно проведет Вас через все шаги создания нового Интернет-чемпионата по деловой игре ""Никсдорф-Дельта"".", 30, 50, 450, 34)
    $Label1_1_2 = GuiCtrlCreateLabel("Вы всегда можете вызвать справку в любом диалоге, нажав F1", 30, 84, 450, 17)
     
     
    ;Рисуем второй диалог мастера
    $ChildGui_2 = GUICreate("", 493, 300, 1, 1, $WS_POPUP)
    DllCall("user32.dll", "int", "SetParent", "hwnd", $ChildGui_2, "hwnd", $Main_GUI) ; помещаем диалог в главное окно
    $Label2_1_1 = GUICtrlCreateLabel("Шаг 1/10: Общие настройки", 24, 8, 147, 17)
    $Group2_2_1 = GUICtrlCreateGroup("Приветствие", 32, 32, 455, 41)
    $Checkbox2_2_1 = GUICtrlCreateCheckbox("Выводить приветствие AutoSend&&Get при запуске", 48, 48, 273, 17, $WS_TABSTOP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2_3_1 = GUICtrlCreateGroup("Название чемпионата", 32, 80, 455, 41)
    $Label2_3_1 = GUICtrlCreateLabel("Введите название чемпионата:", 48, 100, 163, 17)
    $Input2_3_1 = GUICtrlCreateInput("Грейт-4", 210, 96, 113, 21, $WS_TABSTOP)
    $Icon_2_3_1 = GUICtrlCreateIcon("NotOk.ico", -1, 435, 98, 15, 15)
    $Icon_2_3_2 = GUICtrlCreateIcon("Ok.ico", -1, 450, 90, 30, 30)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2_4_1 = GUICtrlCreateGroup("E-mail", 32, 128, 455, 68)
    $Label2_4_1 = GUICtrlCreateLabel("Введите адрес основного ящика, через который Вы будете общаться с участниками. Внимание! Именно ящик для живого общения, а не для рассылки архивов.", 48, 140, 436, 27)
    $Input2_4_1 = GUICtrlCreateInput("delta-greit@yandex.ru", 280, 170, 150, 21, $WS_TABSTOP)
    $Icon_2_4_1 = GUICtrlCreateIcon("NotOk.ico", -1, 435, 173, 15, 15)
    $Icon_2_4_2 = GUICtrlCreateIcon("Ok.ico", -1, 450, 165, 30, 30)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2_5_1 = GUICtrlCreateGroup("Форум", 32, 200, 455, 53)
    $Label2_5_1 = GUICtrlCreateLabel("Введите номер топика Вашего турнира на форуме:", 48, 215, 260, 17)
    $Label2_5_2 = GUICtrlCreateLabel("http://deltaon.ucoz.ru/forum/2-", 49, 230, 149, 17)
    $Input2_5_1 = GUICtrlCreateInput("20", 200, 227, 25, 21, $WS_TABSTOP)
    $Icon_2_5_1 = GUICtrlCreateIcon("NotOk.ico", -1, 435, 228, 15, 15)
    $Icon_2_5_2 = GUICtrlCreateIcon("Ok.ico", -1, 450, 220, 30, 30)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2_6_1 = GUICtrlCreateGroup("Периоды", 32, 257, 455, 41)
    $Label2_6_1 = GUICtrlCreateLabel("Введите количество периодов (от 1 до 20):", 48, 275, 220, 17)
    $InputGui_2_6_1 = GUICtrlCreateInput("12", 265, 273, 34, 17)
    $UpDownGui_2_6_1 = GUICtrlCreateUpdown($InputGui_2_6_1)
    GUICtrlSetLimit (-1, 20, 1)
    $Icon_2_6_1 = GUICtrlCreateIcon("NotOk.ico", -1, 435, 275, 15, 15)
    $Icon_2_6_2 = GUICtrlCreateIcon("Ok.ico", -1, 450, 267, 30, 30)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
     
    ;Рисуем третий диалог мастера
    $ChildGui_3 = GUICreate("", 493, 300, 1, 1, $WS_POPUP)
    DllCall("user32.dll", "int", "SetParent", "hwnd", $ChildGui_3, "hwnd", $Main_GUI) ; помещаем диалог в главное окно
    $Label3_1_1 = GuiCtrlCreateLabel("Шаг 2/10: Настройка исходящих писем", 24, 8, 200, 17)
     
    $Group3_2_1 = GUICtrlCreateGroup("Создание текстов писем", 32, 32, 455, 78)
    $Checkbox3_2_1 = GUICtrlCreateCheckbox("Использовать шаблоны", 48, 50, 140, 17)
    GUICtrlSetState (-1, $GUI_CHECKED)
    $Button3_2_1 = GUICtrlCreateButton("Пример", 320, 48, 60, 20)
    $Checkbox3_2_2 = GUICtrlCreateCheckbox("Использовать обычный шаблон", 62, 75, 180, 17)
    GUICtrlSetState (-1, $GUI_CHECKED)
    $Button3_2_2 = GUICtrlCreateButton("Указать", 320, 73, 60, 20)
    ;GUICtrlSetState (-1, $GUI_DISABLE)
    $Button3_2_5 = GUICtrlCreateButton("Редактировать", 390, 73, 90, 20)
    $Checkbox3_2_3 = GUICtrlCreateCheckbox("Использовать шаблон выходного дня", 62, 100, 210, 17)
    GUICtrlSetState (-1, $GUI_CHECKED)
    $Button3_2_3 = GUICtrlCreateButton("Указать", 320, 98, 60, 20)
    $Button3_2_6 = GUICtrlCreateButton("Редактировать", 390, 98, 90, 20)
    $Checkbox3_2_4 = GUICtrlCreateCheckbox("Использовать шаблон последнего периода", 62, 125, 240, 17)
    GUICtrlSetState (-1, $GUI_CHECKED)
    $Button3_2_4 = GUICtrlCreateButton("Указать", 320, 123, 60, 20)
    $Button3_2_7 = GUICtrlCreateButton("Редактировать", 390, 123, 90, 20)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
     
    $Group3_3_1 = GUICtrlCreateGroup("Тексты писем и архивы", 32, 217, 455, 78)
    $Checkbox3_3_1 = GUICtrlCreateCheckbox("Сохранять отправленные", 48, 233, 145, 17)
    GUICtrlSetState (-1, $GUI_CHECKED)
    $Button3_3_1 = GUICtrlCreateButton("Выбрать папку", 200, 230, 85, 25, 0)
    $Label3_3_1 = GuiCtrlCreateLabel("Текущая папка: ", 48, 250, 90, 17)
    If Not IsDeclared ("save_path") Then
        $save_path = @ScriptDir &"\to_send"
    EndIf
    $Label3_3_2 = GuiCtrlCreateLabel($save_path, 48, 265, 435, 25)
    GUICtrlSetColor(-1, 0x335EA8)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
     
     
    ;Выводим окна на экран
    GUISetState(@SW_SHOW, $Main_GUI)
    GUISetState(@SW_SHOW, $ChildGui_1)
    GUISetState(@SW_HIDE, $ChildGui_2)
    GUISetState(@SW_HIDE, $ChildGui_3)
     
     
    While 1
        $Msg = GUIGetMsg(1)
         
        ;Sleep(100)
        
        Switch $Msg[0]
            Case $GUI_EVENT_CLOSE, $Exit_Button
                If $Msg[0] = $Exit_Button And Not _WinIsVisible($ChildGui_1) Then
                    $Ask = MsgBox(4096, "Attention", "Are you sure you want to exit the Wizard now?", 0, $Msg[1])
                    If $Ask <> 6 Then ContinueLoop
                EndIf
                 
                If $Msg[1] = $Main_GUI Then Exit
            Case $Next_Button
                GUICtrlSetState($Back_Button, $GUI_ENABLE)
                 
                Local $CurrentHandle = 0
                Local $NextHandle = 0
                 
                Select
                    Case _WinIsVisible($ChildGui_1)
                        $CurrentHandle = $ChildGui_1
                        $NextHandle = $ChildGui_2
                    Case _WinIsVisible($ChildGui_2)
                        $CurrentHandle = $ChildGui_2
                        $NextHandle = $ChildGui_3
                        GUICtrlSetState($Next_Button, $GUI_DISABLE)
                EndSelect
                 
                If $CurrentHandle <> 0 Then
                    GUISetState(@SW_HIDE, $CurrentHandle)
                    GUISetState(@SW_SHOW, $NextHandle)
                EndIf
                 
                WinActivate($Main_GUI)
            Case $Back_Button
                GUICtrlSetState($Next_Button, $GUI_ENABLE)
                 
                Local $CurrentHandle = 0
                Local $BackHandle = 0
                 
                Select
                    Case _WinIsVisible($ChildGui_3)
                        $CurrentHandle = $ChildGui_3
                        $BackHandle = $ChildGui_2
                    Case _WinIsVisible($ChildGui_2)
                        $CurrentHandle = $ChildGui_2
                        $BackHandle = $ChildGui_1
                        GUICtrlSetState($Back_Button, $GUI_DISABLE)
                EndSelect
                 
                If $CurrentHandle <> 0 Then
                    GUISetState(@SW_HIDE, $CurrentHandle)
                    GUISetState(@SW_SHOW, $BackHandle)
                EndIf
                 
                WinActivate($Main_GUI)
        EndSwitch
        
           If    GUICtrlRead($Input2_3_1) = "" Then
            GUICtrlSetState($Icon_2_3_1, $GUI_SHOW)
            GUICtrlSetState($Icon_2_3_2, $GUI_HIDE)
        Else
          GUICtrlSetState($Icon_2_3_1, $GUI_HIDE)
          GUICtrlSetState($Icon_2_3_2, $GUI_SHOW)
       EndIf
       
           If    GUICtrlRead($Input2_4_1) = "" Then
          GUICtrlSetState($Icon_2_4_1, $GUI_SHOW)
          GUICtrlSetState($Icon_2_4_2, $GUI_HIDE)
        Else
          GUICtrlSetState($Icon_2_4_1, $GUI_HIDE)
          GUICtrlSetState($Icon_2_4_2, $GUI_SHOW)
       EndIf
       
       If    GUICtrlRead($Input2_5_1) = "" Then
          GUICtrlSetState($Icon_2_5_1, $GUI_SHOW)
          GUICtrlSetState($Icon_2_5_2, $GUI_HIDE)
        Else
          GUICtrlSetState($Icon_2_5_1, $GUI_HIDE)
          GUICtrlSetState($Icon_2_5_2, $GUI_SHOW)
       EndIf
       
       If    GUICtrlRead($UpDownGui_2_6_1) <> 12 Then
          GUICtrlSetState($Icon_2_6_1, $GUI_SHOW)
          GUICtrlSetState($Icon_2_6_2, $GUI_HIDE)
        Else
          GUICtrlSetState($Icon_2_6_1, $GUI_HIDE)
          GUICtrlSetState($Icon_2_6_2, $GUI_SHOW)
       EndIf
     
    WEnd
     
     
     
    Func _GUICtrlCreateSeperator($Direction, $Left, $Top, $Width=3, $Lenght=25)
        Switch $Direction
            Case 0
                GUICtrlCreateLabel("", $Left, $Top, $Lenght, $Width, $SS_SUNKEN)
            Case 1
                GUICtrlCreateLabel("", $Left, $Top, $Width, $Lenght, $SS_SUNKEN)
        EndSwitch
     EndFunc
     
     Func _WinIsVisible($hWnd)
        Return BitAND(WinGetState($hWnd), 2)
    EndFunc

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 13:01 12-09-2008 | Исправлено: Tipulatoid, 13:04 12-09-2008
    Leagnus

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    to ynbIpb
    Есть библиотека от George (GEOSoft) Gedye по управлению Windows-службами/сервисами.
    Но лично я предпочитаю стандартную команду sc, т.к. команда net предназначена для запуска именно сетевых служб.

    Код:
    local $Serv = "NetDDE"
    Run(@comspec & " /c " & "sc stop " & $Serv, "", @SW_HIDE)    ;остановили службу NetDDE
    Run(@comspec & " /c " & "sc config " & $Serv & " start= disabled", "", @SW_HIDE) ;отключили её, чтобы не запускалась
     

    Всего записей: 148 | Зарегистр. 12-09-2008 | Отправлено: 13:09 12-09-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Tipulatoid 13:01 12-09-2008
    Цитата:
    Можно ли уйти от этого мерцания?

    Можно использовать метки (переменные), а ещё  лучше проверять инпуты не в цикле, а при их изменениях (сообщения в WM_NOTIFY)...
     

    Код:
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #include <EditConstants.au3>
     
    ; Устанавливаем иконки
    ;Используются системные
    ;FileInstall("Resources\Ok.ico", "Ok.ico")
    ;FileInstall("Resources\NotOk.ico", "NotOk.ico")
     
    ;Рисуем главное окно

    $Main_GUI = GUICreate("Мастер создания настроек", 500, 360, (@DesktopWidth - 500) / 2, (@DesktopHeight - 300) / 2)
    _GUICtrlCreateSeperator(0, 2, 320, 3, 496)
    ; Рисуем кнопки
    $Back_Button = GUICtrlCreateButton("< Назад", 240, 327, 80)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $Next_Button = GUICtrlCreateButton("Далее >", 320, 327, 80)
    $Exit_Button = GUICtrlCreateButton("Выход", 410, 327, 80)
     
    ;Рисуем первый диалог мастера
    $ChildGui_1 = GUICreate("", 493, 300, 1, 1, $WS_POPUP)
    DllCall("user32.dll", "int", "SetParent", "hwnd", $ChildGui_1, "hwnd", $Main_GUI) ; помещаем диалог в главное окно
    $Label1_1_1 = GUICtrlCreateLabel("Этот мастер создания настроек последовательно проведет Вас через все шаги создания нового Интернет-чемпионата по деловой игре ""Никсдорф-Дельта"".", 30, 50, 450, 34)
    $Label1_1_2 = GUICtrlCreateLabel("Вы всегда можете вызвать справку в любом диалоге, нажав F1", 30, 84, 450, 17)
     
    ;Рисуем второй диалог мастера
    $ChildGui_2 = GUICreate("", 493, 300, 1, 1, $WS_POPUP)
    DllCall("user32.dll", "int", "SetParent", "hwnd", $ChildGui_2, "hwnd", $Main_GUI) ; помещаем диалог в главное окно
    $Label2_1_1 = GUICtrlCreateLabel("Шаг 1/10: Общие настройки", 24, 8, 147, 17)
    $Group2_2_1 = GUICtrlCreateGroup("Приветствие", 32, 32, 455, 41)
    $Checkbox2_2_1 = GUICtrlCreateCheckbox("Выводить приветствие AutoSend&&Get при запуске", 48, 48, 273, 17, $WS_TABSTOP)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2_3_1 = GUICtrlCreateGroup("Название чемпионата", 32, 80, 455, 41)
    $Label2_3_1 = GUICtrlCreateLabel("Введите название чемпионата:", 48, 100, 163, 17)
    $Input2_3_1 = GUICtrlCreateInput("Грейт-4", 210, 96, 113, 21, $WS_TABSTOP)
    $Icon_2_3_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 435, 98, 15, 15)
    $Icon_2_3_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 450, 90, 25, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2_4_1 = GUICtrlCreateGroup("E-mail", 32, 128, 455, 68)
    $Label2_4_1 = GUICtrlCreateLabel("Введите адрес основного ящика, через который Вы будете общаться с участниками. Внимание! Именно ящик для живого общения, а не для рассылки архивов.", 48, 140, 436, 27)
    $Input2_4_1 = GUICtrlCreateInput("delta-greit@yandex.ru", 280, 170, 150, 21, $WS_TABSTOP)
    $Icon_2_4_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 435, 173, 15, 15)
    $Icon_2_4_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 450, 165, 25, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2_5_1 = GUICtrlCreateGroup("Форум", 32, 200, 455, 53)
    $Label2_5_1 = GUICtrlCreateLabel("Введите номер топика Вашего турнира на форуме:", 48, 215, 260, 17)
    $Label2_5_2 = GUICtrlCreateLabel("http://deltaon.ucoz.ru/forum/2-", 49, 230, 149, 17)
    $Input2_5_1 = GUICtrlCreateInput("20", 200, 227, 25, 21, $WS_TABSTOP)
    $Icon_2_5_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 435, 228, 15, 15)
    $Icon_2_5_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 450, 220, 25, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2_6_1 = GUICtrlCreateGroup("Периоды", 32, 257, 455, 41)
    $Label2_6_1 = GUICtrlCreateLabel("Введите количество периодов (от 1 до 20):", 48, 275, 220, 17)
    $InputGui_2_6_1 = GUICtrlCreateInput("12", 265, 273, 34, 17)
    $UpDownGui_2_6_1 = GUICtrlCreateUpdown($InputGui_2_6_1)
    GUICtrlSetLimit(-1, 20, 1)
    $Icon_2_6_1 = GUICtrlCreateIcon("inetcpl.cpl", -23, 435, 275, 15, 15)
    $Icon_2_6_2 = GUICtrlCreateIcon("inetcpl.cpl", -22, 450, 267, 25, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
     
    ;Рисуем третий диалог мастера
    $ChildGui_3 = GUICreate("", 493, 300, 1, 1, $WS_POPUP)
    DllCall("user32.dll", "int", "SetParent", "hwnd", $ChildGui_3, "hwnd", $Main_GUI) ; помещаем диалог в главное окно
    $Label3_1_1 = GUICtrlCreateLabel("Шаг 2/10: Настройка исходящих писем", 24, 8, 200, 17)
     
    $Group3_2_1 = GUICtrlCreateGroup("Создание текстов писем", 32, 32, 455, 78)
    $Checkbox3_2_1 = GUICtrlCreateCheckbox("Использовать шаблоны", 48, 50, 140, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Button3_2_1 = GUICtrlCreateButton("Пример", 320, 48, 60, 20)
    $Checkbox3_2_2 = GUICtrlCreateCheckbox("Использовать обычный шаблон", 62, 75, 180, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Button3_2_2 = GUICtrlCreateButton("Указать", 320, 73, 60, 20)
    ;GUICtrlSetState (-1, $GUI_DISABLE)
    $Button3_2_5 = GUICtrlCreateButton("Редактировать", 390, 73, 90, 20)
    $Checkbox3_2_3 = GUICtrlCreateCheckbox("Использовать шаблон выходного дня", 62, 100, 210, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Button3_2_3 = GUICtrlCreateButton("Указать", 320, 98, 60, 20)
    $Button3_2_6 = GUICtrlCreateButton("Редактировать", 390, 98, 90, 20)
    $Checkbox3_2_4 = GUICtrlCreateCheckbox("Использовать шаблон последнего периода", 62, 125, 240, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Button3_2_4 = GUICtrlCreateButton("Указать", 320, 123, 60, 20)
    $Button3_2_7 = GUICtrlCreateButton("Редактировать", 390, 123, 90, 20)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
     
    $Group3_3_1 = GUICtrlCreateGroup("Тексты писем и архивы", 32, 217, 455, 78)
    $Checkbox3_3_1 = GUICtrlCreateCheckbox("Сохранять отправленные", 48, 233, 145, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Button3_3_1 = GUICtrlCreateButton("Выбрать папку", 200, 230, 85, 25, 0)
    $Label3_3_1 = GUICtrlCreateLabel("Текущая папка: ", 48, 250, 90, 17)
    If Not IsDeclared("save_path") Then
        $save_path = @ScriptDir & "\to_send"
    EndIf
    $Label3_3_2 = GUICtrlCreateLabel($save_path, 48, 265, 435, 25)
    GUICtrlSetColor(-1, 0x335EA8)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
     
    For $i = $Input2_3_1 To $InputGui_2_6_1
        _CheckInputsProc($i)
    Next
     
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
     
    ;Выводим окна на экран
    GUISetState(@SW_SHOW, $Main_GUI)
    GUISetState(@SW_SHOW, $ChildGui_1)
    GUISetState(@SW_HIDE, $ChildGui_2)
    GUISetState(@SW_HIDE, $ChildGui_3)
     
    While 1
        $Msg = GUIGetMsg(1)
     
        Switch $Msg[0]
            Case $GUI_EVENT_CLOSE, $Exit_Button
                If $Msg[0] = $Exit_Button And Not _WinIsVisible($ChildGui_1) Then
                    $Ask = MsgBox(4096+36, "Attention", "Are you sure you want to exit the Wizard now?", 0, $Msg[1])
                    If $Ask <> 6 Then ContinueLoop
                EndIf
     
                If
    $Msg[1] = $Main_GUI Then Exit
            Case
    $Next_Button
                GUICtrlSetState($Back_Button, $GUI_ENABLE)
     
                Local $CurrentHandle = 0
                Local $NextHandle = 0
     
                Select
                    Case
    _WinIsVisible($ChildGui_1)
                        $CurrentHandle = $ChildGui_1
                        $NextHandle = $ChildGui_2
                    Case _WinIsVisible($ChildGui_2)
                        $CurrentHandle = $ChildGui_2
                        $NextHandle = $ChildGui_3
                        GUICtrlSetState($Next_Button, $GUI_DISABLE)
                EndSelect
     
                If $CurrentHandle <> 0 Then
                    GUISetState(@SW_HIDE, $CurrentHandle)
                    GUISetState(@SW_SHOW, $NextHandle)
                EndIf
     
                WinActivate($Main_GUI)
            Case $Back_Button
                GUICtrlSetState($Next_Button, $GUI_ENABLE)
     
                Local $CurrentHandle = 0
                Local $BackHandle = 0
     
                Select
                    Case _WinIsVisible($ChildGui_3)
                        $CurrentHandle = $ChildGui_3
                        $BackHandle = $ChildGui_2
                    Case _WinIsVisible($ChildGui_2)
                        $CurrentHandle = $ChildGui_2
                        $BackHandle = $ChildGui_1
                        GUICtrlSetState($Back_Button, $GUI_DISABLE)
                EndSelect
     
                If $CurrentHandle <> 0 Then
                    GUISetState(@SW_HIDE, $CurrentHandle)
                    GUISetState(@SW_SHOW, $BackHandle)
                EndIf
     
                WinActivate($Main_GUI)
        EndSwitch
    WEnd
     
    Func _GUICtrlCreateSeperator($Direction, $Left, $Top, $Width = 3, $Lenght = 25)
        Switch $Direction
            Case 0
                GUICtrlCreateLabel("", $Left, $Top, $Lenght, $Width, $SS_SUNKEN)
            Case 1
                GUICtrlCreateLabel("", $Left, $Top, $Width, $Lenght, $SS_SUNKEN)
        EndSwitch
    EndFunc   ;==>_GUICtrlCreateSeperator
     
    Func _WinIsVisible($hWnd)
        Return BitAND(WinGetState($hWnd), 2)
    EndFunc   ;==>_WinIsVisible
     
    Func _CheckInputsProc($nCtrlID)
        Switch $nCtrlID
            Case $Input2_3_1
                If GUICtrlRead($Input2_3_1) = "" Then
                    GUICtrlSetState($Icon_2_3_1, $GUI_SHOW)
                    GUICtrlSetState($Icon_2_3_2, $GUI_HIDE)
                Else
                    GUICtrlSetState($Icon_2_3_1, $GUI_HIDE)
                    GUICtrlSetState($Icon_2_3_2, $GUI_SHOW)
                EndIf
            Case $Input2_4_1
                If GUICtrlRead($Input2_4_1) = "" Then
                    GUICtrlSetState($Icon_2_4_1, $GUI_SHOW)
                    GUICtrlSetState($Icon_2_4_2, $GUI_HIDE)
                Else
                    GUICtrlSetState($Icon_2_4_1, $GUI_HIDE)
                    GUICtrlSetState($Icon_2_4_2, $GUI_SHOW)
                EndIf
            Case $Input2_5_1
                If GUICtrlRead($Input2_5_1) = "" Then
                    GUICtrlSetState($Icon_2_5_1, $GUI_SHOW)
                    GUICtrlSetState($Icon_2_5_2, $GUI_HIDE)
                Else
                    GUICtrlSetState($Icon_2_5_1, $GUI_HIDE)
                    GUICtrlSetState($Icon_2_5_2, $GUI_SHOW)
                EndIf
            Case $InputGui_2_6_1
                If GUICtrlRead($InputGui_2_6_1) <> 12 Then
                    GUICtrlSetState($Icon_2_6_1, $GUI_SHOW)
                    GUICtrlSetState($Icon_2_6_2, $GUI_HIDE)
                Else
                    GUICtrlSetState($Icon_2_6_1, $GUI_HIDE)
                    GUICtrlSetState($Icon_2_6_2, $GUI_SHOW)
                EndIf
        EndSwitch
    EndFunc   ;==>_CheckInputsProc
     
    Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
        Local $nNotifyCode = BitShift($wParam, 16)
        Local $nID = BitAND($wParam, 0xFFFF)
        Local $hCtrl = $lParam
     
        Switch $nNotifyCode
            Case $EN_CHANGE, $EN_UPDATE
                _CheckInputsProc($nID)
        EndSwitch
     
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_COMMAND

     
    Можно также вместо функции GUICtrlSetState($Icon_2_3_1, $GUI_SHOW) использовать самодельную, похожую функцию, но проверять в ней статус элемента (отображается или нет). Подробнее...

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 14:16 12-09-2008
    Maza Faka



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

    Цитата:
    Ну почему, и создаёт тоже, ведь если переменная не объявлена, то Assign() её объявляет

    Выдаёт в консоль вот такие сообщения:

    Код:
     
    : WARNING: $Var: possibly used before declaration.
    ConsoleWrite($Var)
    ~~~~~~~~~~~~~~~~~^
    : ERROR: $Var: undeclared global variable.
    ConsoleWrite($Var)
     

    AutoIt v3.2.12.1
     
    Tipulatoid
    Поищи в версии для печати, ViSiToR выкладывал пример создания мастера.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:23 12-09-2008
    alex832008

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А как будет выглядеть функция Eval для массива ?
    например нужно вернуть значение $mas[$i][$j]

    Всего записей: 13 | Зарегистр. 11-09-2008 | Отправлено: 14:38 12-09-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka 14:23 12-09-2008
    Цитата:
    Выдаёт в консоль вот такие сообщения

    Это видимо потому что проверка синтаксиса выполняется до запуска скрипта...
    Добавлено: Хотя нет, у меня нормально, только что проверил.
    Попробуй запустить не из SciTE.
     

    Цитата:
    ViSiToR выкладывал пример создания мастера

    Ну вообще то кажется по просьбе Tipulatoid я его и выкладывал, и в примере он и используется - Вопрос то не в том как мастер сделать , почитай его пост внимательней.
     
    alex832008 14:38 12-09-2008
    Цитата:
    нужно вернуть значение $mas[$i][$j]

    Используем Execute:
     

    Код:
     
    Dim $Array[2] = ["Test 1", "Test 2"]
     
    $sEVal_0 = Execute("$Array[0]")
    $sEVal_1 = Execute("$Array[1]")
     
    ConsoleWrite($sEVal_0 & @CRLF & $sEVal_1 & @CRLF)


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 14:50 12-09-2008 | Исправлено: ViSiToR, 14:54 12-09-2008
    alex832008

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

    Цитата:
    alex832008 14:38 12-09-2008  
    Цитата:нужно вернуть значение $mas[$i][$j]  
     
    Используем Execute:  
     
     
    Код:  
    Dim $Array[2] = ["Test 1", "Test 2"]  
     
    $sEVal_0 = Execute("$Array[0]")  
    $sEVal_1 = Execute("$Array[1]")  
     
    ConsoleWrite($sEVal_0 & @CRLF & $sEVal_1 & @CRLF)  

     
    Ну а к примеру  
    $bases = IniReadSection("C:\Temp\BASELIST.ini", "bases")     ; читаем из INI базы и их общее количество
    If @error Then  
        MsgBox(4096, "", "Error occurred, probably no INI file.")  
    EndIf;
    for $i=1 to  $bases[0][0]    ; читаем из INI базы
    Assign($bases[$i][1],IniReadSection("C:\Temp\BASELIST.ini", $bases[$i][1]))                        ; тут формируются массивы, имена которых совпадают с именами папок с базами, а в самих смассивах содержаться имена баз  
        If @error Then  
        MsgBox(4096, "", "Error occurred, probably no INI file.") ;
        EndIf
    Next
     
    Т.е. в первом массиве $bases содержатся секции,  
    далее создаем по секциям массивы. которые содержат значения секций
    А вот как работать с самими массивами секций, т.е. как к примеру перейти на элемнт массива секции ?
     

    Всего записей: 13 | Зарегистр. 11-09-2008 | Отправлено: 15:47 12-09-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    alex832008 15:47 12-09-2008
    Цитата:
    как к примеру перейти на элемнт массива секции ?

    Т.е прочитать массив в массиве?
     

    Код:
    $Element1_Array = $bases[1][1]
    ConsoleWrite($Element1_Array[1][1])


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:51 12-09-2008
    alex832008

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

    Цитата:
    $Element1_Array = $bases[1][1]  
    ConsoleWrite($Element1_Array[1][1])  

     
     
    В примере выше $bases[1][1] имеет значение, далее объявилася двухмерный массив с именем значения $bases[1][1]. А вот как увидеть-то этот массив?
    К примеру выести значения.
    Я то лично знаю, как выглядят имена массивов, ведь они в первой секции ИНИ, но как к ним обратиться, когда они уже являются массивами ?

    Всего записей: 13 | Зарегистр. 11-09-2008 | Отправлено: 15:59 12-09-2008 | Исправлено: alex832008, 16:51 12-09-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    alex832008 15:59 12-09-2008
    Цитата:
    как к ним обратиться, когда они уже являются массивами ?

    Я же показал это выше... или я не понимаю что нужно. В $bases[1][1] содержится (как я понял) массив, просто помещаем его в новую переменную (для извлечения/просмотра) и пользуемся ей как массивом.
     
    На заметку (на всякий пожарный):
     
    Это..

    Код:
    Assign($bases[$i][1],IniReadSection("C:\Temp\BASELIST.ini", $bases[$i][1]))

     
    То же самое что и это:
     

    Код:
    $bases[$i][1] = IniReadSection("C:\Temp\BASELIST.ini", $bases[$i][1])

     
    Т.е в $base[$i][1] теперь содержится ещё массив, который возвращает IniReadSection().

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 17:27 12-09-2008
    BIOS999

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Кто-нибудь помогите решить задачку:
    Есть две программы написанных на AutoIt-е
    Надо чтобы вовремя их работы, одна программа  
    Передала другой значение переменно $pass.
    Через запись реестра или через запись в файл не получится.
    Надо чтобы нельзя было перехватить это значение.
     
    Заранее спасибо, BIOS.

    Всего записей: 30 | Зарегистр. 26-05-2008 | Отправлено: 17:54 12-09-2008
    alex832008

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

    Цитата:
    alex832008 15:59 12-09-2008  
    Цитата:как к ним обратиться, когда они уже являются массивами ?  
     
    Я же показал это выше... или я не понимаю что нужно. В $bases[1][1] содержится (как я понял) массив, просто помещаем его в новую переменную (для извлечения/просмотра) и пользуемся ей как массивом.  
     
    На заметку (на всякий пожарный):  
     
    Это..  
     
    Код:Assign($bases[$i][1],IniReadSection("C:\Temp\BASELIST.ini", $bases[$i][1]))  
     
     
    То же самое что и это:  
     
     
    Код:$bases[$i][1] = IniReadSection("C:\Temp\BASELIST.ini", $bases[$i][1])  
     
     
    Т.е в $base[$i][1] теперь содержится ещё массив, который возвращает IniReadSection().

     
    Ну к примеру сначла $bases[3]=["r1","r2","r3"]
    for $i=1 to 3
    Assign($bases[$i][1],IniReadSection("C:\Temp\BASELIST.ini", $bases[$i][1]))  
    next
    Мы получили массивы $r1,$r2,$r3, но $bases[3]=["r1","r2","r3"]
    но это я знаю, что надо объявлять и обращаться $r1,$r2,$r3, но надо чтобы все зависело от ини, т.е сегодня там одна секция, а завтра 50.
    т.е. как я понимаю необходимо обращаться к переменной $&base[2], но такую переменную я же не могу показать.Может я чего-то не понимаю....

    Всего записей: 13 | Зарегистр. 11-09-2008 | Отправлено: 18:08 12-09-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    alex832008 18:08 12-09-2008
    Цитата:
    Мы получили массивы $r1,$r2,$r3

    Откуда мы их получили? тут просто для каждого элемента от 1 до 3 будет присвоено значение массива, т.е массив в массиве.
     
    Насколько я начинаю понимать, дела обстоят немного проще(?). Нужно получить список секции, и каждую секцию поместить в массив?
     
    Вот пример, если это не то, тогда лучше подробно и ясно опиши задачу, с точки зрения пользователя, не скриптера
     

    Код:
    #include <Array.au3>
     
    $sIniFile = "BASELIST.ini"
     
    ;Читаем имена всех секции в файле
    $aSectNames = IniReadSectionNames($sIniFile)
     
    If Not @error Then
        ;Читаем в массив каждую секцию в файле BASELIST.ini
        For $i = 1 To UBound($aSectNames)-1
            Assign("aSection_" & $i, IniReadSection($sIniFile, $aSectNames[$i]), 2)
     
            $aTmpArr = Eval("aSection_" & $i)
     
            ;Отображаем только что созданный массив содержащий записи текущей секции - для проверки
            _ArrayDisplay($aTmpArr, "Section: [" & $aSectNames[$i] & "]")
        Next
     
        ;Выводим на экран ключ и значение первого элемента в первой секции
        MsgBox(64, "", $aSection_1[1][0] & "=" & $aSection_1[1][1])
     
        ;Выводим на экран ключ и значение первого элемента во второй секции
        MsgBox(64, "", $aSection_2[1][0] & "=" & $aSection_2[1][1])
     
        ;Теперь каждая переменная $aSection_N содержит массив с секциями, этих переменных столько, сколько секции в ини файле
        ;Их колчество можно определить по $aSectNames[0]

        ConsoleWrite($aSectNames[0])
    EndIf


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 18:33 12-09-2008
    Maza Faka



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

    Цитата:
    Это видимо потому что проверка синтаксиса выполняется до запуска скрипта...  
    Добавлено: Хотя нет, у меня нормально, только что проверил.  
    Попробуй запустить не из SciTE.

    Да, в общем-то работает, если игнорировать ошибки и предупреждения, но всё же странно, почему SciTE ругается. Запостю вопрос на офф. форуме
     
    BIOS999

    Цитата:
    Кто-нибудь помогите решить задачку:

    Не совсем понятна задачка, может быть этот пример (его когда-то выкладывал ViSiToR) поможет тебе:

    Код:
    #include <GuiConstants.au3>
     
    Global $AppTitle = "My App"
     
    $Main_GUI = GUICreate($AppTitle, 300, 200)
     
    $Reciever_Edit = GUICtrlCreateEdit("", -500, -500)
    GUICtrlSetState(-1, $GUI_HIDE)
     
    $CheckConnection_Button = GUICtrlCreateButton("Check Connection", 20, 160, 120, 20)
     
    GUISetState()
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case
    $CheckConnection_Button
                $InetIsConnected
    = _InetIsConnected() = 1
                MsgBox(64, "Results", "Inet is Connected: " & $InetIsConnected)
        EndSwitch
    WEnd
     
    Func
    _InetIsConnected()
        Local $sScript_Content = '#NoTrayIcon' & @CRLF
        $sScript_Content &= '$hWinInetDll = DllOpen("wininet.dll")' & @CRLF
        $sScript_Content &= 'If $hWinInetDll = -1 Then SendDataToParent(SetError(1, 0, -1))' & @CRLF
        $sScript_Content &= '$IsConnected = DllCall($hWinInetDll, "int", "InternetGetConnectedState", "int", 0, "int", 0)' & @CRLF
        $sScript_Content &= 'DllClose($hWinInetDll)' & @CRLF
        $sScript_Content &= 'If IsArray($IsConnected) Then' & @CRLF
        $sScript_Content &= '   SendDataToParent($IsConnected[0])' & @CRLF
        $sScript_Content &= 'Else' & @CRLF
        $sScript_Content &= '   SendDataToParent(False)' & @CRLF
        $sScript_Content &= 'EndIf' & @CRLF & @CRLF
        $sScript_Content &= 'Func SendDataToParent($sData)' & @CRLF
        $sScript_Content &= '   $iParent_WinHandle = WinGetHandle("[CLASS:AutoIt v3 GUI; TITLE:' & $AppTitle & ']")' & @CRLF
        $sScript_Content &= '   ControlSetText($iParent_WinHandle, "", "Edit1", $sData, 1)' & @CRLF
        $sScript_Content &= 'EndFunc' & @CRLF
     
        Local $sTmp_Script = @TempDir & "\AutoIt_Tmp_Script.call"
     
        Local $hOpen_Tmp_Script = FileOpen($sTmp_Script, 2)
        FileWrite($hOpen_Tmp_Script, $sScript_Content)
        FileClose($hOpen_Tmp_Script)
     
        RunWait(@AutoItExe & ' /ErrorStdOut /AutoIt3ExecuteScript "' & $sTmp_Script & '"', @ScriptDir, @SW_HIDE)
     
        Local $sRet_Data = GUICtrlRead($Reciever_Edit)
     
        GUICtrlSetData($Reciever_Edit, "")
        FileDelete($sTmp_Script)
     
        Return $sRet_Data
    EndFunc

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 09:47 13-09-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