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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 03:17 01-02-2009
    Цитата:
    с помощью этих средств ни как не передать в Reciever совсем "левые" данные

    А зачем их передавать?
     

    Цитата:
    Reciever так просто не закроется, а зависает

    Скорее всего он просто вываливается, это баг аутоита, в функции DllCallBackFree. Исправить это можно заменив DllCallBackFree($hCallBack) в функции _TimerStop() (в скрипте AU3_INTERACT.au3) на это:
     

    Код:
    If $hCallBack > 0 Then
        DllCallBackFree($hCallBack)
        $hCallBack = 0
    EndIf

     

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

    Там интеракция происодит методом регистрации сообщения WM_COPYDATA.
    Использовать можно ещё так: Подробнее.
     
    Добавлено:
    vbrv 11:01 01-02-2009
    Цитата:
    чтобы при его запуске не вылетал UAC с сообщением

    На то защита и была создана - Можно в начало скрипта поместить #RequireAdmin, по идее будет спрашивать логин и пароль админа чтобы был доступ у программы.

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

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



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

    Цитата:
    А зачем их передавать?  

    ну а как же тырить пароли юзеров то ))....шучу..
    в целом и так замечательно, это же не вариант tcp сервер/клиент.
    просто эстетика, хотел все запихнуть в sender.
     

    Цитата:
    Скорее всего он просто вываливается, это баг аутоита, в функции DllCallBackFree. Исправить это можно заменив DllCallBackFree($hCallBack) в функции _TimerStop() (в скрипте AU3_INTERACT.au3) на это:

    с заменой закрываться тсал лучше. но вот если во время работы Sender-а
    закрыть Reciever - то он опять зависает...
     
    в целом очень интересный вариант "общения скриптов", но вот эти мелкие "баги"
    пока напрягают, Visitor, а ты Multi Process Helper тестировал?
    что то с первого раза у меня ни как (просто что то не запустилось),
    просто думаю есть ли смысл продолжать копать - дохлый это
    вариант или же есть надежды?
     
    Вопрос:
    А есть ли способ извлечь/получить информацию об устройствах компьютера:
    производитель и модель мат. платы, производитель и модель проца, ram,  
    чипсет, видео - без классов win wmi?
    или подобных альтернатив нет?
     

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 07:18 03-02-2009 | Исправлено: sproxy, 10:19 03-02-2009
    Z4masko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как сделать выход из функции при нажатии на кнопку в ГУИ интерфейсе без режима OnEventMode.
     
    Например есть кодпрограммы:
     

    Код:
     
    main() ;------ Функция создающая элементы ГУИ  
    Вот её образное  внутренне содержание
    Создаём Кнопку 1
    Создаём Кнопу 2
    Создаём Кнопку 3
    while 1  
    опрос состояния кнопок
    ....
    Если нажимаем кнопку 1 - вызываем GetFile ()
    EndWhile
    ---------------------------------------------------------
     
    GetFile () ;------ функция качающая файлизинтернет на жёсткий диск
    Вот её образное внутренне содержание:
    Заходим на такой то сайт и збираем такой то файл..
    ....
    После того как скачали файл, возвращаемся к main() и продолжаем опрос состояния кнопок
    ---------------------------------------------------------
     

     
    Проблема в том, что когда функция GetFile () выполняется(а именно пока не загрузится файл), то естественно Кнопки 1, 2, 3 не опрашиваются и при их нажатии ничего не происходит, нужно сделать принудительный выход из функции GetFile ()  (например принажатии "Кнопки 3") без ожидания окончания загрузки файла.

    ----------
    Ремонт АКПП Лексус (Lexus): RX 300, RX 330, RX 350, LX 470, GX 470, GS 300 ...

    Всего записей: 735 | Зарегистр. 05-11-2004 | Отправлено: 15:25 03-02-2009
    sproxy



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

    Цитата:
    Подскажите как сделать выход из функции при нажатии на кнопку в ГУИ интерфейсе без режима OnEventMode.

     
    во-во-во, именно с таким же и у меня сейчас задача.
    есть вариант использовать пример Интеракция между несколькими скриптами.
     
    т.е. в одном скрипте будет GUI окно, а в другом будет функции качающая файлы из интернет.
     
    либо вариант 2, использовать: HotKeySet. т.е. установить "горячую клавишу" при нажатии на которую быдет выход из программы или принудительное завершение процесса программы.....
     
    либо как вариант 1, но без интеракции скриптов.
    т.е. файл 1, в котором GUI, будет запускать файл 2, котороый качает файл. параметры, что качать, файлу 2 можно передовать через коммандную строку. файл 2 можно запускать в скрытом режиме, но с GUI интерфейсом на котором будет показываться самый простой ход работы событий:
    - началось скаичвание
    - заверишилось удачей
    - завершилось не удачей..
    и вот этот ход событий можно считывать из скрытого окна и показывать в файле1 с помощью WinGetText, по идее.... Ну, а по нажатии, из файла 1, кнопки "отменить скачивание" - банально завершать процесс файла 2, который качал файл...
     
    хм...ViSiToR, как думаешь, такой вариант "интеракции" проканает?=
    эххххх.......результат:
    Put to FTP GUI.au3
    Подробнее...
     
    Put to FTP Module.au3
    Подробнее...
     
     
    НЕ проканало....т.к. пока Модуль отправляет данные на FTP то его окно висит, а в это время GUI окно читает данные лога из Модуля с помощью ControlGetText, а так как окно Модуля висит  - то и окно GUI зависает. Как понимаю у ControlGetText бооооооооольшой тайм-аут .....
     
    НО если не делать чтение лога, а только передовать файл - то тут все сработает, но идея получается очень уже мало гибка...очень....
     
     
    -------
    ооооооооо ....кстати, есть же ControlSetText и можно наоборот!!! ..?
    т.е. весь ход своих событий файл2 может вставлять в определенное disable поле файла1, и это поле можно расположить за видимостью. и в файле1 каждый 10 мсек сычитывать инфо из этого поля, а после считывания сразуже обнулять его. !!! ....умм..походу это релаьней...
     
     
     
    Добавлено:
    а по поводу примера
    Цитата:
    Интеракция между несколькими скриптами
    , то он у меня при тестах переодически зависает, файл Приема. конечно все дело в AU3_INTERACT.au3, надо разобрать его.......

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 22:33 03-02-2009 | Исправлено: sproxy, 06:29 04-02-2009
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    AutoItErrorHandler для скомпиленных скриптов не выдет линию. Я еще нуб и с StdOut'ами не разбирался.
    А можно объединить AutoItErrorHandler_v1.2 и Debugger? Т.е. чтобы из подсказки в трее дергалась строка? Ну или еще как-то это организовать?

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 01:49 04-02-2009
    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
       

    Страницы: 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