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

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

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

Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166

   

Widok



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

AutoIt3
(Часть 1)

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

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

 
Помощь по AutoIT:
  • Справку на русском (и не только) вы всегда(?) сможете найти тут
  • Учебник по AutoIt для начинающих
  • Видео-руководства на YouTube (англ.)
  • AutoIt v3: Your Quick Guide (652 КБ) - Ваш быстрый гид в мир AutoIt-а (книга в формате pdf) - Та же книжка online.
  • Справочник по командам rundll32
  • Справка WinAPI (Win 32 API по шагам)
  • Русский справочник по API-функциям
  • Полезная информация по WinAPI на русском
  • Помощь по регулярным выражениям
  • Tutorial on DllCall() & DllStructs - Небольшое (пока?) руководство по использованию функции DllCall*()
     
     
    Ресурсы, посвящённые AutoIt
  • AutoIt в Википедии
  • AutoIt Russian Community - Русское сообщество AutoIt
  • Jabber-конференция для обсуждения мелких вопросов касающихся AutoIt
  • Обзор скриптового языка AutoIt (рус.)
  • AutoIt на Yahoo! Groups
  • Раздел в конфиренции OSzone.net, посвящённый AutoIt
  • Пополняющийся со временем сайт с полезными утилитами и функциями на AutoIt
  • Коллекция AutoIt-скриптов от Sanja Alone
  • Коллекция AutoIt-скриптов от MSFN (могут быть устаревшие).
  • Коллекция AutoIt-скриптов от AZJIO
     
     
    !!! Полезные советы и заметки - новичкам и не только
     
     
  • Рекомендации по написанию скриптов
     
     
    Инструменты для AutoIt:
  • AutoIt Path Switcher - Переключение пути к папке 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:
  • Desktop Icons Restorator - Скрипт-программа для сохранения/восстановления позиции значков рабочего стола.
  • CaptureIt - Утилита для захвата изображений с экрана.
  • SwitchIt - Скрипт для конвертирования выделенного текста.
  • Скрипт раскраски кода AutoIt для публикации в форумах
     
    Общие вопросы и решения на Autoit:
  • Обработчик скриптов добавляющий отладчик (debugger) - Последняя версия: AutoItScript Add Debugger
  • Интеракция между несколькими скриптами
  • Пример использование интеракции между скриптами - Добавление элементов GUI с внешнего модуля
  • Чтение и запись данных с/в окна/о SciTE
  • Пример автообновления версии своего приложения
  • Копирование большого файла с отображением данных прогресса
  • Создание динамического меню в Tray Icon (значок в области уведомлений)
  • Пример создания своего мастера (Wizard)
  • Метод, позволяющий запускать код VBS без создания временных файлов
  • Описание функции GUIRegisterMsg()
  • Пример перехвата вводимых символов с клавиатуры
  • Пример деактивирования TabItem
  • Пример вывода лога в Edit-поле (с поддержкой форматирования текста)
  • Пример остановки/начало выполнения скрипта + Слежение за буфером обмена с заменой неподдерживаемых в имени файла символов
  • Подключение приложения (GUI) к буферу обмена
  • Пример использования меню с значками (ModernMenu.au3) -> Список программ в меню значка в системном трее
  • Пример подсчёта интервала времени между нажатиями клавиш
  • Слежение нажатых элементов в текущем окне (под курсором)
  • Написание instant messaging Бота на AutoIt
  • Способ, позволяющий посылать нажатие клавиши в неактивное окно (не путать со свёрнутым)
  • Сервер <=> Клиент - Пример передачи файла
  • Пример отображения только элементов GUI (без самой оболочки)
  • Модуль, превращающий ваше приложение в Trial-версию
  • Слежение за выделенным текстом и с последующим его помещением в файл
     
    Отдельные функции и библиотеки (UDF):
  • Функции, относящиеся к интернету
  • Функции для работы с процессами и окнами
  • Функции для работы с файлами
  • Функции для GUI/Tray
  • Системные функции
  • Разное (то, что не подпадает под другие категории)
     


     
    За шапкой следит ViSiToR  

  • Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 14:47 12-01-2009 | Исправлено: Maz, 11:50 17-04-2017
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    файл 1 GUI:
    Подробнее...
     
    файл 2 Модуль
    Подробнее...
     
    уже работает лучше. файл GUI не виснет, и не должен вообще виснуть по идее, так как вообще ни как не зависит от файла2 Модуля отправки. но есть нюанс, если происходит отправка очень маленького файла, то обработка вывода лога неуспевает. думаю стоит попробовать сделать, что бы файл2, после установки нового текста лога в файл1, становился на зацикленный цикл и ждал появления в каком нить своем текстов поле определенного текст и только после продолжал бы работу. а этот текст, в файл2, будет ставить файл1 после того как обработает текст лога, который ему, в свою очередь, до этого, установил файл2.....похрду должно сработать....
     
    умудренные опытом и знаниями, Ребята, подскажите минусы данной идее...не в скриптах - они на скорую руку...а в идее.

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 07:02 04-02-2009
    D_Master



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
     
    Дано: сохраненный html-файл.
    Задача: прочитать содержимое файла, найти указанную строку и получить число, идущее после неё.
    Поясню: надо найти строку "Всего зарегистрированных пользователей: <b>" после нее идет число пользоватей. Вот его-то и надо загнать в переменную и выдать MsgBox'ом. Известно, что строка с этой надписью идет под номером 634.
    Что сделано:

    Код:
    #NoTrayIcon
    $a = "http://url.url/index.php"
    InetGet($a, "C:\Page.html")
    $file = @ScriptDir & "\Page.html"
    FileOpen($file, 0)
    $new = FileReadLine($file, 634)
    FileClose($file)
    MsgBox(64, "", $new)
    Exit

    Вопрос: как обрезать выдаваемую строку по нужным критериям?
    Выдается такая строка:

    Код:
    <td class="row1" align="left" width="100%"><span class="gensmall">Наши пользователи оставили сообщений: <b>480949</b><br />Всего зарегистрированных пользователей: <b>9918</b><br />Последний зарегистрированный пользователь: <b><a href="profile.php?mode=viewprofile&amp;u=9938&amp;sid=0bb6a46a043fb6c7d589aa2005afed5d">Scual</a></b></span></td>

    Соответственно, нужно оставить 9918 (удалить
    Код:
    <td class="row1" align="left" width="100%"><span class="gensmall">Наши пользователи оставили сообщений: <b>480949</b><br />Всего зарегистрированных пользователей: <b>
    и
    Код:
    </b><br />Всего зарегистрированных пользователей: <b>9918</b><br />Последний зарегистрированный пользователь: <b><a href="profile.php?mode=viewprofile&amp;u=9938&amp;sid=0bb6a46a043fb6c7d589aa2005afed5d">Scual</a></b></span></td>

     
    Надеюсь на вашу помощь!

    Всего записей: 11 | Зарегистр. 15-10-2008 | Отправлено: 11:36 04-02-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 22:33 03-02-2009
    Цитата:
    как думаешь, такой вариант "интеракции" проканает?

    Возможно, но ты на верном пути, главное это проверять свои идеи в реальности
     
    timsky 01:49 04-02-2009
    Цитата:
    AutoItErrorHandler для скомпиленных скриптов не выдет линию

    А никто не говорил что он это умеет
     

    Цитата:
    можно объединить AutoItErrorHandler_v1.2 и Debugger

    Зачем, это два разных отладчика, первый для отлова критических сбоев с дружественным интерфейсом для юзера, а второй для отладки собственных скриптов...
     
    P.S
    Скажу по секрету: Я лично подобными дебагерами никогда не пользовался, всё проверял "руками" и методом втыка, даже когда только начинал кодить .

     
    Добавлено:
    D_Master 11:36 04-02-2009
    Цитата:
    Задача: прочитать содержимое файла, найти указанную строку и получить число, идущее после неё.

    Вот так примерно:
     

    Код:
    #NoTrayIcon
     
    $sLine = '<td class="row1" align="left" width="100%"><span class="gensmall">Наши пользователи оставили сообщений: <b>480949</b><br />Всего зарегистрированных пользователей: <b>9918</b><br />Последний зарегистрированный пользователь: <b><a href="profile.php?mode=viewprofile&amp;u=9938&amp;sid=0bb6a46a043fb6c7d589aa2005afed5d">Scual</a></b></span></td>'
     
    $sNumber = StringRegExpReplace($sLine, "(?i).*пользователей: <b>(\d+)</b>.*", "\1")
    $sNumber = Number($sNumber)
     
    MsgBox(64, "", $sNumber)


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 13:41 04-02-2009
    timsky



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

    Цитата:
    Зачем, это два разных отладчика, первый для отлова критических сбоев с дружественным интерфейсом для юзера, а второй для отладки собственных скриптов...

    Дык, и я так же
    Просто мне в течение месяца придется подымать мои скритпы на десятках серверов, в дальнейшем, скорее всего, на стонях. А в следствие различных внешних факторов, которые не предугадаешь периодически возникают ошибки, которые нужно изучать...
     
    Ну хотя бы с AutoItErrorHandler поможешь разобраться если что?

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 16:51 04-02-2009 | Исправлено: timsky, 16:52 04-02-2009
    D_Master



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Огромное спасибо, всё работает!!

    Всего записей: 11 | Зарегистр. 15-10-2008 | Отправлено: 17:12 04-02-2009
    Hackproof



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    На форме в работающем скрипте требуется создавать кнопки, и их данные (координаты, текст на кнопке и еще пару вещей) писать в ini. При последующих запусках скрипта данные для кнопок будут читаться из файла.
    Вторую часть я могу сделать, а вот первую - не очень...  
    Был вариант с HotKeySet, по нажатию которого на координатах мышки ставилась кнопка, но тогда эта кнопка блокируется в остальных приложениях. Есть какой-нибудь другой вариант?

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 20:59 04-02-2009 | Исправлено: Hackproof, 21:14 04-02-2009
    sproxy



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

    Цитата:
    На форме в работающем скрипте требуется создавать кнопк

     
    а в вледствие каких условий будут появляться кнопки? может сделать проверку, если свершилось ситуация1, то сделать кнопку1, если свершилась ситуация2, то сделать кнопку2 ....?
     
    если неизвестно колличество кнопок в ini, то считывать их данные из ini можно с помощью: IniReadSection  
     
     
    Добавлено:

    Цитата:
    Вторую часть я могу сделать, а вот первую - не очень...  

    если вообще вопрос про "как создовать кнопки", вот простой пример:
     

    Код:
    #include <GUIConstants.au3>
     
    Opt("GUIOnEventMode", 1)
    $mainwindow = GUICreate("Hello World", 200, 100)
        GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
        GUICtrlCreateLabel("Hello world! How are you?", 30, 10)
     
    $okbutton = GUICtrlCreateButton("OK", 70, 50, 60)
        GUICtrlSetOnEvent($okbutton, "OKButton")
     
    GUISetState(@SW_SHOW)
     
    While 1
      Sleep(1000)
    WEnd
     
    Func
    OKButton()
      MsgBox(0, "GUI Event", "You pressed OK!")
    EndFunc
     
    Func
    CLOSEClicked()
      MsgBox(0, "GUI Event", "You clicked CLOSE! Exiting...")
      Exit
    EndFunc

     
    Добавлено:
    ViSiToR
    просто не разберусь, в AU3_INTERACT.au3..что выполняет _SendMessage($hWnd, $WM_AU3_USR, 0, 1001), т.е. каким методом Sender передает данные в Reciever (а точнее в AU3_INTERACT), .....какое то обращение через dll...а дальше куда он девает 1001 - т.е. куда принимает его AU3_INTERACT?

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 21:39 04-02-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    timsky 16:51 04-02-2009
    Цитата:
    с AutoItErrorHandler поможешь разобраться если что?

    А в чём проблема?
     
    sproxy 21:39 04-02-2009
    Цитата:
    что выполняет _SendMessage

    Посылает сообщение
     

    Цитата:
    каким методом Sender передает данные в Reciever

    На первом этапе происходит регистрация WM_USER (она-же позже будет получать сообщение и заполнять им переменную $vINTERACT_Msg), запускается таймер (вызов Callback-функции -> _Interaction_Handler(), которая выполняется по таймеру каждые 10 мс), и зполняется массив ($aMAIN_FUNCTIONS) для хранения данных о интеракции (имена функции, параметры, и самое важное -> «идентификаторы-сообщения» (1001, 1002 и т.д.)).
    Далее, та самая callback-функция просто ожидает сообщение со стороны Sender'а, как только сообщение послано (тут и вступает роль _SendMessage()'а), переменная $vINTERACT_Msg заполняется этим сообщением, а callback-функция распознаёт сообщение, и в цикле проверяет какому элементу в массиве ($aMAIN_FUNCTIONS) оно пренадлежит, и соответственно запускает функции с параметрами из найденного элемента.
     
    Достаточно ясно?

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 22:50 04-02-2009
    sproxy



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

    Цитата:
    На первом этапе происходит регистрация WM_USER (она-же позже будет получать сообщение и заполнять им переменную $vINTERACT_Msg), запускается таймер (вызов Callback-функции -> _Interaction_Handler(), которая выполняется по таймеру каждые 10 мс), и зполняется массив ($aMAIN_FUNCTIONS) для хранения данных о интеракции (имена функции, параметры, и самое важное -> «идентификаторы-сообщения» (1001, 1002 и т.д.)).  
    Далее, та самая callback-функция просто ожидает сообщение со стороны Sender'а, как только сообщение послано (тут и вступает роль _SendMessage()'а), переменная $vINTERACT_Msg заполняется этим сообщением, а callback-функция распознаёт сообщение, и в цикле проверяет какому элементу в массиве ($aMAIN_FUNCTIONS) оно пренадлежит, и соответственно запускает функции с параметрами из найденного элемента.

     
    ДА! очень понятно, имено это и спрашивал. ...только почему же зависает Reciever...
    В целом мне это больше нарвиться....хм...как то серьезней )))
     
    ..а по существу, какие могут быт, на взгляд, недостатки у метода передачи через ControlSetText? (единественное, что в нем нравится - не виснет).
     
    или к примеру передовать данные через переменную среды, учитывая, что данне не секретные...

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 23:13 04-02-2009
    Hackproof



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sproxy
    Я таки не первый день замужем...
    Речь идет не о банальном создании кнопки на форме через код, а динамическом добавлении кнопок на форму при работающем скрипте.
    Мой вариант выглядит так: При нажатии пробела под курсором создается кнопка.

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    $Form1 = GUICreate("Form1", 633, 454, 193, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    GUISetState(@SW_SHOW)
    HotKeySet("{SPACE}","addbutton")
    $i=0 ;Номер кнопки
    While 1
        Sleep(100)
    WEnd
     
    Func
    Form1Close()
    Exit
    EndFunc
     
    func
    addbutton()
        $i=$i+1
        $a=MouseGetPos()
        $b=WinGetPos("Form1")
        GUICtrlCreateButton("",$a[0]-$b[0]-10,$a[1]-$b[1]-27,17,17)
        IniWrite("c:\buttons.ini","button"&$i,"xpos",$a[0]-$b[0]-10)
        IniWrite("c:\buttons.ini","button"&$i,"ypos",$a[1]-$b[1]-27)
    EndFunc

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

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 23:48 04-02-2009 | Исправлено: Hackproof, 00:10 05-02-2009
    sproxy



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

    Цитата:
    Я таки не первый день замужем...

    как спросил - так и ответил =ъ
     

    Цитата:
    Но при этом блокируется пробел во всех программах. Интересует возможность установки кнопок например, по клику мышки, и чтобы это не отражалось на чем-то еще.

    тогда сделай проверку:
    когда окно формы НЕ активно или свернуто или скрыто, то HotKeySet("{SPACE}"), а как только окно формы активно то HotKeySet("{SPACE}","addbutton") и будет тебе счастье ))
     
     
    Добавлено:
    вот легкий пример вдогонку:
     

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    Global $win_state=''
    Global $hot_key=''
    $Form1 = GUICreate("Form1", 633, 454, 193, 115)
        GUISetOnEvent($GUI_EVENT_RESTORE,   'Form1Show')
        GUISetOnEvent($GUI_EVENT_MINIMIZE,  'Form1Mini')
        GUISetOnEvent($GUI_EVENT_CLOSE,     "Form1Close")
    GUISetState(@SW_SHOW)
    HotKeySet("{SPACE}","addbutton")
    $hot_key = 'yes'
    $i=0 ;Номер кнопки
    While 1
        Sleep(10)
        ToolTip('State "Form1":' & @TAB & WinGetState('Form1') & @CRLF & 'State hot key:' & @TAB & $hot_key, 10, 100)
        If WinGetState('Form1') <> 15 Then
            Form1Mini()
        Else
            Form1Show()
        EndIf
    WEnd
     
    Func
    Form1Show()
        If $win_state <> 'active' Then
            HotKeySet("{SPACE}","addbutton")
            $hot_key = 'yes'
            $win_state = 'active'
        EndIf
    EndFunc
     
    Func
    Form1Mini()
        If $win_state == 'active' Then
            HotKeySet("{SPACE}")
            $hot_key = 'no'
            $win_state = 'no active'
        EndIf
    EndFunc
     
    Func
    Form1Close()
        HotKeySet("{SPACE}")
        $hot_key = 'no'
        Exit
    EndFunc
     
    func
    addbutton()
        $i=$i+1
        $a=MouseGetPos()
        $b=WinGetPos("Form1")
        GUICtrlCreateButton("",$a[0]-$b[0]-10,$a[1]-$b[1]-27,17,17)
        IniWrite("c:\buttons.ini","button"&$i,"xpos",$a[0]-$b[0]-10)
        IniWrite("c:\buttons.ini","button"&$i,"ypos",$a[1]-$b[1]-27)
    EndFunc

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 00:47 05-02-2009
    Hackproof



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот это уже гуд, спасибо.

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 00:53 05-02-2009
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ...блин ))))))))
    а прикольно рисуется...прям paint захотелось сделать )))))))))))
     
    Добавлено:

    Цитата:
    Вот это уже гуд, спасибо.

    как где то писал ViSiToR...
    что: правильно заданный вопрос - это уже почти 50% ответа!

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 00:54 05-02-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 23:13 04-02-2009
    Цитата:
     почему же зависает Reciever

    Надо полагать из за Callback'ов. В принципе оно не всегда нужно, можно просто проверять в цикле например. Для этого в AU3_INTERACT.au3 удаляем/комментируем все строчки с _TimerStart/Stop, а в цикле уже используем такой метод:
     

    Код:
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <AU3_INTERACT.au3>
    ;
     
    #Region _AutoItSetInteraction() Part
    ;Тут данные массива интеракции
    #EndRegion _AutoItSetInteraction() Part
    ;
     
    $hGUI = GUICreate("_AutoItSetInteraction Demo", 400, 200, -1, -1, -1, $WS_EX_TOPMOST)
     
    $Edit = GUICtrlCreateEdit("", 10, 10, 380, 180)
     
    GUISetState()
     
    While 1
        $nMsg = GUIGetMsg()
     
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
     
        If
    $vINTERACT_Msg <> -1 Then
            For
    $i = 0 To UBound($aMAIN_FUNCTIONS)-1
                If $aMAIN_FUNCTIONS[$i][0] = $vINTERACT_Msg Then
                    $vINTERACT_Msg = -1
     
                    Call($aMAIN_FUNCTIONS[$i][1], $aMAIN_FUNCTIONS[$i][2])
                    If @error Then Call($aMAIN_FUNCTIONS[$i][1])
     
                    ExitLoop
                EndIf
            Next

     
            $vINTERACT_Msg = -1
        EndIf
    WEnd

     
    Минус тут в том, что пока первая функция не завершит своё выполнение, другая не будет запущена.
     
     
     
    Добавлено:
    sproxy 23:13 04-02-2009
    Цитата:
    какие могут быт, на взгляд, недостатки у метода передачи через ControlSetText?

    Не надёжность, данные могут "не туда" попасть, или ещё что-то по пути помешает
    Кстати, на эту тему я запостил недавно скрипт для интеракции (определение и получение значении у переменных из другого скрипта).

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 01:38 05-02-2009
    sproxy



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

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

    вот! точно так же и я делал..

    Цитата:
    не туда

    не уж то может?...все таки...если искать окно по  

    Цитата:
    ControlSetText("[CLASS:AutoIt v3;TITLE:Reciever Script]", "", "Edit1", $sSend_Data)

    + указать какой нить текст окна и использовать: AutoItSetOption ('WinDetectHiddenText',    1) + запускать только одно окно Reciever....хмммм.....
     
     
    Добавлено:
    а вместо этого:

    Код:
     
            $sFirst_Line = StringLeft($sInteract_Data, StringInStr($sInteract_Data, @CRLF))
            $sFirst_Line = StringStripWS($sFirst_Line, 3)
             
            $sMsg = StringTrimLeft($sInteract_Data, StringInStr($sInteract_Data, @CRLF))
            $sMsg = StringStripWS($sMsg, 3)
     

     
    можно использовать StringSplit
     
    Добавлено:
    кстати, в Reciever.au3:, где Edit1 поле?...в упор не вижу...

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 02:01 05-02-2009 | Исправлено: sproxy, 02:16 05-02-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 02:01 05-02-2009
    Цитата:
    + указать какой нить текст окна и использовать: AutoItSetOption ('WinDetectHiddenText',    1)

    Это увеличит надёжность, текст желательно использовать уникальный, можно например генерировать GUID:
     

    Код:
     
    $sGUID = _Get_GUID()
     
    ConsoleWrite($sGUID & @CRLF)
     
    Func _Get_GUID()
        Local $oTypeLib = ObjCreate("Scriptlet.TypeLib")
        If IsObj($oTypeLib) Then Return $oTypeLib.GUID
     
        Return SetError(1, 0, 0)
    EndFunc

     

    Цитата:
    можно использовать StringSplit

    Да можно и RegExp, я там просто на скорую руку накатал пример.
     
     

    Цитата:
    кстати, в Reciever.au3:, где Edit1 поле?...в упор не вижу...

    А это окошко скрытое - Почитай в справке по AutoItWinSetTitle.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 02:41 05-02-2009
    sproxy



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

    Цитата:
    Это увеличит надёжность, текст желательно использовать уникальный, можно например генерировать GUID:

    хм...так если генерировать GUI ID, то он каждый раз разный, и если его генерировать при запуске для Reciever окна, то как о нем узнает Sender?
     
    ..или же ты предлагаешь сгенерировать GUI ID для Reciever, что бы далее его прочитал Sender, и уже во всех следующих передаче данных в Reciever, использовать только этот GUI ID, так ?
     

    Цитата:
    Да можно и RegExp, я там просто на скорую руку накатал пример.

    угу, не обращай внимания, эт выпендреж у меня ))))))
     

    Цитата:
    А это окошко скрытое  - Почитай в справке по AutoItWinSetTitle.

    умм...поспешил, не посмотрел что [CLASS:AutoIt v3;
     
    Добавлено:
    в целом вариант интеракции...хм..более гибкий, и более крахо-устойчивый.....но более подвержен риску "отправит/считать не туда/не то" ....хотя этот риск ограничивается:
     
    1. CLASS:AutoIt v3
    2. заголовком окна
    3. GUI ID (или любым другим специфичным текстом)
    4. запускать только 1 копию Reciever...либо делать проверку какую нить....
     
    к примеру , если запуск Sender происходит из Reciever, можно принудительно ему ставить Gui ID Reciever-а, и тогда этот Sender не ошибется куда передовать данные...
     
    или лучше передовать Sender-у GUI ID Reciever через коммандную строку..

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 03:30 05-02-2009 | Исправлено: sproxy, 03:47 05-02-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 03:30 05-02-2009
    Цитата:
     генерировать GUI ID

    Это не GUI ID, а GUID (Globally Unique Identifier) .
     

    Цитата:
    .или же ты предлагаешь сгенерировать GUI ID для Reciever, что бы далее его прочитал Sender, и уже во всех следующих передаче данных в Reciever, использовать только этот

    Да, именно так.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 03:48 05-02-2009
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    а что это вообще за "объекты" ObjCreate ?
    часто через них создаются "нужные штуки"..
     
    почитал в google, полезнео дело COM объекты.
    а где можно найти/почитать подробнее про них и использовать в AutoIT ?
     
     
    Добавлено:
    вообще свой объект содать с помощью AutoIT возможно?
    как понимаю ObjCreate создают ссылку на внешние объекты...

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 03:58 05-02-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 03:58 05-02-2009
    Цитата:
     свой объект содать с помощью AutoIT возможно?

    Почти.
     


     
    ALL
    По поводу книжки AutoIt v3: Your Quick Guide из шапки, вот тут её можно почитать в on-line.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 05:18 05-02-2009
       

    Страницы: 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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)
    Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru