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

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

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

    Код:
    ;Скрипт рисует круговую диаграмму
     
    ;по идее программка смотрит инет статистику и показывает в графическом виде
    ;сколько осталось траффика
     
    ;может кто подрисует диаграмму, чтоб она была по объемней как в Экселе

     
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <timers.au3>
    #include <FontConstants.au3>
     
    HotKeySet("{ESC}", "_ende")
     
    Global $ballpos1=200
    Global $ballpos2=80
    Global $BewegungSenkrecht=Random(5, 7, 1)
    Global $BewegungWagrecht=Random(5, 7, 1)
    Global $Speed=10
    Global $tRECT, $hFont, $hOldFont, $hDC
     
    $tRECT
    = DllStructCreate($tagRect)
    DllStructSetData($tRECT, "Left", 10)
    DllStructSetData($tRECT, "Top", 5)
    DllStructSetData($tRECT, "Right", 300)
    DllStructSetData($tRECT, "Bottom", 800)
     
    _GDIPlus_Startup()
        $pr = 50
        $prm = -360+10
    ;Global $hGui = GUICreate("Rahmen", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
     
    Global $hGui = GUICreate("Rahmen",400, 300,800, 100, $WS_POPUP, $WS_EX_LAYERED)
     
    $hDC = _WinAPI_GetDC($hGui)
    ;GUISetBkColor(0xABCDEF) ;прозрачное окно
    _WinAPI_SetLayeredWindowAttributes($hGui, 0xABCDEF, 255)
    GUISetState()
    Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
     
    ;$hDC = _WinAPI_GetDC(0)
     
    $hPen = _GDIPlus_PenCreate(0xFF0000FF, 2)
    ;$hPen = _GDIPlus_PenCreate(0xcc000000, 2)
     
    Global $vanish = _GDIPlus_PenCreate(0xFFFF0000 , 70) ;_GDIPlus_BrushCreateSolid(0xffff1a10)
     
    $hBrush2 = _GDIPlus_BrushCreateSolid(0xff42b8c8) ;синий
    $hBrush = _GDIPlus_BrushCreateSolid(0xffff1a10)
     
     _GDIPlus_GraphicsDrawEllipse($hGraphic, $ballpos1, $ballpos2, 150, 100, $hPen)
    _GDIPlus_GraphicsFillPie($hGraphic, $ballpos1, $ballpos2, 150, 100, 0, -340,$hBrush2)
     _GDIPlus_GraphicsFillPie($hGraphic, $ballpos1,$ballpos2, 150, 100, 1, $pr,$hBrush)
     
    $hFont = _WinAPI_CreateFont(25, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial')
    $hOldFont = _WinAPI_SelectObject($hDC, $hFont)
     
    _WinAPI_SetTextColor($hDC, 0x0000FF)
    _WinAPI_SetBkColor($hDC, 0x000000)
    ; comment next line to get black background instead of transparent one
    _WinAPI_SetBkMode($hDC, $TRANSPARENT)
     
        _WinAPI_DrawText($hDC, "Статистика на, " & "2009.03.29" & @CRLF & "   "& @CRLF & "123 "& "руб." , $tRECT, $DT_LEFT)
     
    While 1
        Sleep(40)
    WEnd
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_BrushDispose($vanish)
     
    Func _ende()
        _GDIPlus_Shutdown()
        Exit
    EndFunc
     ;==>_ende
     
    Func _WinAPI_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $dwFlages = 0x03, $isColorRef = False)
       ; progandy
        If $dwFlages = Default Or $dwFlages = "" Or $dwFlages < 0 Then $dwFlages = 0x03
        If Not $isColorRef Then
            $i_transcolor = Hex(String($i_transcolor), 6)
            $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
        EndIf
        Local
    $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $dwFlages)
        Select
            Case
    @error
                Return SetError(@error, 0, 0)
            Case $Ret[0] = 0
                Return SetError(4, _WinAPI_GetLastError(), 0)
            Case Else
                Return
    1
        EndSelect
    EndFunc
     ;==>_WinAPI_SetLayeredWindowAttributes

    Всего записей: 3 | Зарегистр. 06-03-2007 | Отправлено: 12:24 31-03-2009
    YSTRIK



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

    Всего записей: 114 | Зарегистр. 10-05-2006 | Отправлено: 13:48 31-03-2009 | Исправлено: YSTRIK, 14:40 31-03-2009
    ArtemSV



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Парни, подскажите новичку пожалуйста...
     
    Я заморочился такой темой: Как отследить закрытие моего процесса AutoIT, например из диспечера задач ?  
    Что-то типа поставить hook на wm_close и клонировать процесс в случае, если кто-то его решил убить !?

    Всего записей: 6 | Зарегистр. 10-02-2008 | Отправлено: 15:57 31-03-2009 | Исправлено: ArtemSV, 16:00 31-03-2009
    MIHMIH007



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

    Цитата:
    Что-то типа поставить hook на wm_close и клонировать процесс в случае, если кто-то его решил убить !?

    While 1
    While ProcessExists('process.exe')  
        Sleep(100)  
    WEnd
    Run(@ScriptDir & '\process.exe')
    WEnd
     
    Гуру поправте если я ошибся...

    Всего записей: 743 | Зарегистр. 05-12-2006 | Отправлено: 16:07 31-03-2009
    ArtemSV



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не, так не красиво ... Это должен крутиться еще один паралельный процесс А кроме того нужно написать антизакрывалку на него и так до бесконечности ...
    Меня всеже интересует реализация в том-же скрипте. Чтобы ему винда сообщала, что его закрывают.

    Всего записей: 6 | Зарегистр. 10-02-2008 | Отправлено: 16:13 31-03-2009 | Исправлено: ArtemSV, 16:55 31-03-2009
    FullHD

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sproxy
    А можно какнибуть с помощью AutoIT придумать систему обноления  . Ну допустим ,в программе зделаной с помощью AutoIT   , вписать  код который до появления GUI проверяет на конкретном IP  этот-же фаил  и сравнивает  версии файлов и если версия выше  то выдает сообщение  типа" повявилась новая версия 1.0.0.2 , загрузить ?"  при нажатии скачивает и  заменяет   старую версии на новую .
     
    Чтото типа такого можно придумать на AutoIT ??

    Всего записей: 25 | Зарегистр. 24-02-2009 | Отправлено: 19:00 31-03-2009 | Исправлено: FullHD, 19:01 31-03-2009
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    undefined
    Цитата:
    Подскажите плиз, как реализовать с помощью AutoIt проверку какого-либо порта на предмет открыт порт (т.е. находится в состоянии LISTENING) или нет?

    в подарачной обертке  :
     

    Код:
    #region: - Option
        Opt('MustDeclareVars',      1)
        Opt('TrayIconDebug',        1)
        Opt('TrayIconHide',         0)
    #endregion
     
    _TcpCheckSocetFreeOrBusy('127.0.0.1', 80,    1, 1)
    _TcpCheckSocetFreeOrBusy('127.0.0.1', 32451, 1, 1)
     
    ; #FUNCTION# ====================================================================================================================
    ; Name...........:  _TcpCheckSocetFreeOrBusy
    ; Description ...:  Проверка TCP сокета: свободен/занят
    ; Syntax.........:  _TcpCheckSocetFreeOrBusy($sIp, $iSocket, [, $iShowMsg=0] [, $iTCPStartup=0])
    ; Parameters ....:  $sIp         - Ip адрес (IpV4)
    ;~                  $iSocket     - Порт, к которому создается подключение сокета
    ;~                  $iShowMsg    - (1/0) Показывать/не показывать сообщение о результате
    ;~                  $iTCPStartup - (1/0) Инициировать использование служб TCP
    ; Return values .:  Success      - Идентификатор сокета
    ;                   Failure
    ;~                           |0  - Ошибка иницилизации использования службы TCP
    ;~                           |-1 - Сокет занят
    ; Author ........: `p r o x y (icq 729406)
    ; Related .......:  TCPListen
    ; Link ..........;  Справка AutoIt > Указатель функций > Обработка TCP и UDP > TCPListen
    ;~                  Autoit Help > Function Reference > Network Function > TCPListen
    ;~                  http://www.autoitscript.com/autoit3/docs/functions/TCPListen.htm
    ; Example .......;  Yes
    ; ===============================================================================================================================

    Func _TcpCheckSocetFreeOrBusy($sIp, $iSocket, $iShowMsg=0, $iTCPStartup=0)
        If $iTCPStartup == 1 Then
            If
    TCPStartUp() == 0 Then Return 0
        EndIf
     
        Local
     $hSocket, $sMsgText, $iIcon
     
        $hSocket
    = TCPListen($sIP, $iSocket,  100)
        If $hSocket == -1 Then
            $sMsgText = 'Результат проверки: ' & @TAB & 'Сокет занят  '
            $iIcon = 16+262144
        Else
            $sMsgText = 'Результат проверки: ' & @TAB & 'Сокет свободен  ' & @CRLF & 'Идентификатор сокета: ' & @TAB & $hSocket
            $iIcon
    = 64+262144
            TCPCloseSocket($hSocket)
        EndIf
     
        If
    $iTCPStartup == 1 Then TCPShutdown()
        If $iShowMsg == 1 Then
            MsgBox($iIcon,  'Проверка TCP сокета: свободен/занят', _
                            'Ip адрес подключения: ' & @TAB & $sIp & @CRLF & _
                            'Порт подключения: '     & @TAB & $iSocket & @CRLF & @CRLF & _
                            $sMsgText, 30)
        EndIf
     
        Return $hSocket
    EndFunc   ;==>_TcpCheckSocetFreeOrBusy

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    YSTRIK 13:48 31-03-2009
    Цитата:
    как отправить скрипт после IF .... Then наверх, на повтор  ?

    Используйте цикл.
     
    ArtemSV 16:13 31-03-2009
    Цитата:
    интересует реализация в том-же скрипте

    Не получится, “убийство” процесса не несёт интерактивный характер, процесс не знает когда его убили.
     
    FullHD 19:00 31-03-2009
    Цитата:
    Чтото типа такого можно придумать на AutoIT ?

    Вопрос не ко-мне, но я бы ответил так: Можно! Для этого вам нужен сервер (с открытым доступом), поместить файл с версией на этот сервер, и использовать функции типа «_InetGetSource/InetGet/StringRegExpReplace» и т.п.

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

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



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    FullHD 19:00 31-03-2009
    Цитата:
    А можно какнибуть с помощью AutoIT придумать систему обноления  . Ну допустим ,в программе зделаной с помощью AutoIT   , вписать  код который до появления GUI проверяет на конкретном IP  этот-же фаил  и сравнивает  версии файлов и если версия выше  то выдает сообщение  типа" повявилась новая версия 1.0.0.2 , загрузить ?"  при нажатии скачивает и  заменяет   старую версии на новую .  
      
     Чтото типа такого можно придумать на AutoIT ??

    да, можно, чуть позже напишу пример...
     
    Добавлено:
    ArtemSV 16:13 31-03-2009
    Цитата:
    Не, так не красиво ... Это должен крутиться еще один паралельный процесс    А кроме того нужно написать антизакрывалку на него и так до бесконечности ...  
     Меня всеже интересует реализация в том-же скрипте. Чтобы ему винда сообщала, что его закрывают.

    есть идея....

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 19:44 31-03-2009
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ArtemSV 15:57 31-03-2009
    Цитата:
    Парни, подскажите новичку пожалуйста...  
      
     Я заморочился такой темой: Как отследить закрытие моего процесса AutoIT, например из диспечера задач ?  
     Что-то типа поставить hook на wm_close и клонировать процесс в случае, если кто-то его решил убить !?

     
    это 200% железно:ViSiToR 19:42 31-03-2009
    Цитата:
    Не получится, “убийство” процесса не несёт интерактивный характер, процесс не знает когда его убили.

     
    но можно как предложил:MIHMIH007 16:07 31-03-2009
    Цитата:
    While 1  
     While ProcessExists('process.exe')  
         Sleep(100)  
     WEnd  
     Run(@ScriptDir & '\process.exe')  
     WEnd

     
    файл запускатель: RunIfNoExistsLauncher.exe
    Подробнее...
     
    сама проагрмма: RunIfNoExists.exe
    Подробнее...
     
    Сначала скомпилировать: RunIfNoExistsLauncher.exe
    А потом скомпилировать: RunIfNoExists.exe
    именно скомпилировать - в SciTe нажать F7, либо вручную.
    Файл RunIfNoExistsLauncher.exe по умолчанию должен иметь именно это название, либо поменять его в скрипте RunIfNoExists вот в этих строчках:

    Код:
    FileInstall('RunIfNoExistsLauncher.exe', @TempDir & '\RunIfNoExistsLauncher.dat', 1)
    ...
    $sLauncherFilePath = StringLower(FileGetShortName(@TempDir & '\' & 'RunIfNoExistsLauncher.dat'))

     
    Добавлено:
     
    Для теста запускать RunIfNoExists.exe, файл запускатель RunIfNoExistsLauncher.exe вшит в него.

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 23:10 31-03-2009
    Цитата:
    но можно как предложил

    Но ArtemSV ведь написал, что не хочет дополнительных процессов!

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

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



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ViSiToR 23:28 31-03-2009
    Цитата:
    Но ArtemSV ведь написал, что не хочет дополнительных процессов!

    ...уххх...это более для себя, так как идея интересная, а средствами WInApi
    или другими, не стандартными AutoIt, - не в курсе как реализовать, и изучать/искать буду долго.
    А так - готовоее решение. Мини изврат - который все таки справляется с задачей )))
    Уж, "to use or not to use" - дело самого вопрощателя )))
     
    Добавлено:
    FullHD 19:00 31-03-2009
    Цитата:
    А можно какнибуть с помощью AutoIT придумать систему обноления  . Ну допустим ,в программе зделаной с помощью AutoIT   , вписать  код который до появления GUI проверяет на конкретном IP  этот-же фаил  и сравнивает  версии файлов и если версия выше  то выдает сообщение  типа" повявилась новая версия 1.0.0.2 , загрузить ?"  при нажатии скачивает и  заменяет   старую версии на новую .  
      
     Чтото типа такого можно придумать на AutoIT ??

     
    вариант обновления по сети или из локальной папки:

    Код:
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_Fileversion=0.1
    #EndRegion
    ;**** Directives created by AutoIt3Wrapper_GUI ****
    #region: - Option
        Opt('GUIOnEventMode',       1)
        Opt('MustDeclareVars',      1)
        Opt('TrayIconDebug',        1)
        Opt('TrayIconHide',         0)
    #endregion
     
    HotKeySet('{ESC}', '_Pro_Exit')
     
    #region: - Include
        #include <GUIConstantsEx.au3>
        #Include <Misc.au3>
        #include <WindowsConstants.au3>
    #endregion
     
    #region: - Global: Название и версия программы, ProID

        Global  $sProName, $sProVerON, $sProVer, $sProNameVer, $sProIDText, $sProFilePath
                $sProName
        = 'Test'
                $sProVerON    = '0.1'
                $sProVer      = 'v' & $sProVerON
                $sProNameVer
     = $sProName & ' ' & $sProVer
                $sProIDText
      = $sProNameVer & ' [ID] ' & $sProNameVer
                $sProFilePath
    = FileGetShortName(@ScriptFullPath)
    #endregion
     
    #region: - Cmd Line

        Global  $YesSingleton = 1
        If $CmdLine[0] > 0 AND StringInStr($CmdLineRaw, '/File:') Then
            $YesSingleton = 0
            Global  $sFilePath
            $sFilePath
    = FileGetLongName(_Cmd_Read($CmdLineRaw, '/File:'))
            _UpdateReplace()
        EndIf
    #endregion
     
    #region: - Одна копия программы

        If $YesSingleton == 1 AND _Singleton($sProIDText, 1) == 0 Then _Pro_Exit()
    #endregion
     
    #region: - Global

        Global  $sCfgUpdatePath = '\\192.168.0.2\update'
        Global  $sCfgUpdateFileName = 'lastpro'
     
        Global  $hWinMain, $hVerNoUpdateFile, $hUpdate
    #endregion
     
    #region: - Главное окно

        $hWinMain = GUICreate($sProNameVer, 400, 400, -1, -1)
            GUISetOnEvent($GUI_EVENT_CLOSE,     '_Pro_Exit')
     
        GUICtrlCreateLabel('Текущая версия: '   & @TAB & $sProVerON, 10+2, 10, 200, 15)
        $hVerNoUpdateFile = GUICtrlCreateLabel('Последняя версия: ' & @TAB & '-----', 10+2, 10+20, 200, 15)
     
        GUICtrlCreateLabel('Адрес обновления:', 10+2, 10+45, 200, 15)
        GUICtrlCreateInput($sCfgUpdatePath & '\' & $sCfgUpdateFileName, 10, 10+45+15, 200, 20)
     
        GUICtrlCreateButton('Проверить обновления', 10, 10+95, 200, 25)
            GUICtrlSetState(-1, $GUI_FOCUS)
                GUICtrlSetOnEvent(-1, '_GetVerNoUpdateFile')
        $hUpdate = GUICtrlCreateButton('Обновить программу', 10, 10+95+25, 200, 25)
            GUICtrlSetState(-1, $GUI_DISABLE)
                GUICtrlSetOnEvent(-1, '_UpdateDownload')
    #endregion
     
    #region: - После создания всех GUI

        GUISetState(@SW_SHOW, $hWinMain)
    #endregion
     
    #region: - Sleep, Exit

    While 1
        Sleep(100)
    WEnd
     
    Func
    _Pro_Exit()
        Exit
    EndFunc

    #endregion
     
    Func _Cmd_Read($sCmdLine, $sArgument)
        If Not StringInStr($sCmdLine, $sArgument) Then Return ''
        Local $sRetCmd = StringRegExpReplace($sCmdLine, '(?i)(?s).*?' & $sArgument & '"(.*?)".*?$', '\1')
        If $sRetCmd = $sCmdLine Or @extended < 1 Then Return ''
     
        Return StringStripWS($sRetCmd, 3)
    EndFunc
     
    Func
    _GetVerNoUpdateFile()
        Local $sVerNoTemp = $sProVerON
        Local $sVerNoUpdateFile = FileGetVersion($sCfgUpdatePath & '\' & $sCfgUpdateFileName)
     
        If StringRight($sVerNoTemp, 6) == '0.0.0' Then $sVerNoTemp = StringTrimRight($sVerNoTemp, 6)
        If StringRight($sVerNoTemp, 4) == '0.0' Then $sVerNoTemp = StringTrimRight($sVerNoTemp, 4)
        If StringRight($sVerNoTemp, 1) == '0' Then $sVerNoTemp = StringTrimRight($sVerNoTemp, 1)
     
        If StringRight($sVerNoUpdateFile, 6) == '.0.0.0' Then $sVerNoUpdateFile = StringTrimRight($sVerNoUpdateFile, 6)
        If StringRight($sVerNoUpdateFile, 4) == '.0.0' Then $sVerNoUpdateFile = StringTrimRight($sVerNoUpdateFile, 4)
        If StringRight($sVerNoUpdateFile, 1) == '0' Then $sVerNoUpdateFile = StringTrimRight($sVerNoUpdateFile, 1)
     
        If $sVerNoUpdateFile == '0.0.0.0' Then
            $sVerNoUpdateFile = 'Ошибка'
        Else
            If
    $sVerNoTemp <> $sVerNoUpdateFile Then GUICtrlSetState($hUpdate, $GUI_ENABLE)
        EndIf
        GUICtrlSetData($hVerNoUpdateFile, 'Последняя версия: ' & @TAB & $sVerNoUpdateFile)
    EndFunc
     
    Func
    _UpdateDownload()
        FileCopy($sCfgUpdatePath & '\' & $sCfgUpdateFileName, @TempDir & '\' & $sProName & '.exe', 1)
        Run(FileGetShortName(@TempDir & '\' & $sProName & '.exe') & ' /File:"' & $sProFilePath & '"')
        _Pro_Exit()
    EndFunc
     
    Func
    _UpdateReplace()
        FileCopy(@TempDir & '\' & $sProName & '.exe', $sFilePath, 1)
        Run($sFilePath)
        _Pro_Exit()
    EndFunc

     
    1. скомпилировать с параметрами:

    Цитата:
    #AutoIt3Wrapper_Res_Fileversion=0.2
    ...
    $sProVerON    = '0.2'

    2. переместить скомпилированный файл в папке: $sCfgUpdatePath и переименовать в соостветсвие: $sCfgUpdateFileName
    3. скомпилировать с параметрами:

    Цитата:
    #AutoIt3Wrapper_Res_Fileversion=0.1
    ...
    $sProVerON    = '0.1'

    4. запустить ....

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 23:40 31-03-2009 | Исправлено: sproxy, 23:46 31-03-2009
    YSTRIK



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    to ViSiToR
    я немного не так сформулировал вопрос, оно и так внутри цикла, мне нужно, что бы после проверки если условие верно после Then подать команду на поднятие наверх скрипта (на метку или ещё как то), и повторять уже с верхнего куска.

    Всего записей: 114 | Зарегистр. 10-05-2006 | Отправлено: 08:32 01-04-2009
    Nikkorot

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YSTRIK
    Вынесите фрагмент кода в отдельную пользовательскую функцию и выполняйте ее по требованию.

    Всего записей: 50 | Зарегистр. 19-05-2006 | Отправлено: 09:12 01-04-2009
    asdfzxcv



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sproxy твой шикарный пример про TCPListen мне очень понравился, только не пойму он работает только по локальному хосту 127.0.0.1 ? а по сети с удалённым компом он не будет работать ? напрмер с 192.168.1.30 у меня не работает

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 10:38 01-04-2009 | Исправлено: asdfzxcv, 12:53 01-04-2009
    ArtemSV



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо  большое за дельные советы !
     
    2 ViSiToR: Странно конечно, что через винАПИ нельзя получать сообщение о закрытии (( Энто чтож такое получается, окно может получать сообщение, а процесс нет ?
     
    2 sproxy: Ухты ))) Вот это прога ... Сейчас попробую разобрать. Спасибо !
     

    Всего записей: 6 | Зарегистр. 10-02-2008 | Отправлено: 10:45 01-04-2009 | Исправлено: ArtemSV, 11:32 01-04-2009
    FullHD

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sproxy
    Спасибо.
    А пример обновления  через интернет можете еще написать  допустим ссылка вглядит так http://96.х.х.х/update/lastpro.exe
     
    Я так понял с вашего примера . в локальной сети тоесть с шары  проверят версию файла . Тоесть для интернета надо сперва этот фаил скачать а потом проверять ?

    Всего записей: 25 | Зарегистр. 24-02-2009 | Отправлено: 11:02 01-04-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    FullHD 11:02 01-04-2009
    Цитата:
    для интернета надо сперва этот фаил скачать а потом проверять ?

    Это не самый лучший метод проверки обновления, я лично делаю так...
     
    Пример автообновления версии своего приложения

     

    Код:
    #include <GUIConstantsEx.au3>
    #include <Misc.au3>
    #include <Inet.au3>
    ;
     
    Global $sAppUpdate_Page = "http://creator-lab.ucoz.ru/Testing_Zone/MyApp_Update.inf"
    Global $sApp_Version = "1.0"
     
    Global $hGUI = 0
     
    ;Here we checking in quiet mode (only if new version available there will be a message).
    _AppCheckUpdates_Proc($sAppUpdate_Page, $sApp_Version, 1)
     
    #Region GUI Part
    $hGUI = GUICreate("My Application", 300, 200)
     
    $CheckUpdates_Button = GUICtrlCreateButton("Check Updates", 200, 170, 90, 20)
    $Exit_Button = GUICtrlCreateButton("Exit", 20, 170, 60, 20)
     
    GUISetState(@SW_SHOW, $hGUI)
    #EndRegion GUI Part
    ;
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $Exit_Button
                Exit
            Case
    $CheckUpdates_Button
                _AppCheckUpdates_Proc($sAppUpdate_Page, $sApp_Version)
        EndSwitch
    WEnd
     
    Func
    _AppCheckUpdates_Proc($sServer_Page, $sCurrent_AppVersion, $iMode=-1) ;$iMode <> -1 to check quitly
        Local $sUpdate_Info = _INetGetSource($sServer_Page)
     
        If Not StringInStr($sUpdate_Info, "[Info]") Then
            If
    $iMode = -1 Then MsgBox(48, "Update check", _
                StringFormat("There was an error (%i) to check update, please contact with the author.", 1), 0, $hGUI)
     
            Return SetError(1, 0, 0)
        EndIf
     
        Local
    $sUpdate_Version = StringRegExpReplace($sUpdate_Info, "(?s)(?i).*Update Version=(.*?)(\r|\n).*", "\1")
        Local $sUpdate_File = StringRegExpReplace($sUpdate_Info, "(?s)(?i).*Update File=(.*?)(\r|\n).*", "\1")
     
        If _VersionCompare($sUpdate_Version, $sCurrent_AppVersion) = 1 Then
            Local
    $iUpdate_Ask = MsgBox(36, "Update check", _
                StringFormat("There is new version available (%s).\n\nWould you like to download the update?", $sUpdate_Version), _
                0, $hGUI)
     
            If $iUpdate_Ask <> 6 Then Return 0
     
            Local $sScript_Name = StringTrimRight(@ScriptName, 4) & ".efe"
     
            Local $iInetGet = InetGet($sUpdate_File, @TempDir & "\" & $sScript_Name)
     
            If @error Or Not $iInetGet Then
                If
    $iMode = -1 Then MsgBox(48, "Update check", _
                    StringFormat("There was an error (%i) to download the update, please contact with the author.", 2), 0, $hGUI)
     
                Return SetError(2, 0, 0)
            EndIf
     
            Run(@ComSpec & ' /c Ping -n 2 localhost > nul & Move /y "' & _
                @TempDir & '\' & $sScript_Name & '" "' & @ScriptFullPath & '" & Start "" "' & @ScriptFullPath & '"', '', @SW_HIDE)
     
            Exit
        EndIf
     
        If
    $iMode = -1 Then MsgBox(48, "Update check", "You are using the newest version of this software.", 0, $hGUI)
        Return 1
    EndFunc

     
    Содержимое MyApp_Update.inf на сервере:
     

    Код:
    [Info]
    Update Version=1.1
    Update File=http://creator-lab.ucoz.ru/Testing_Zone/MyApp.efe

     
    После «Update File=» нужно указать свою ссылку на файл (с открытым/публичным доступом).
    При каждом обновлении, меняем версию после «Update Version=» на более новую.
     
    P.S
    Для корректной проверки, пример нужно скомпиллировать.
     
     


     
    Добавлено:
    ArtemSV 10:45 01-04-2009
    Цитата:
    Странно конечно, что через винАПИ нельзя получать сообщение о закрытии

    Я про закрытие ничего не писал, это можно отловить через WM_CLOSE. Но когда процесс убивают с диспетчера задач, WM_CLOSE не отсылается приложению.
     
    YSTRIK 08:32 01-04-2009
    Цитата:
    нужно, что бы после проверки если условие верно после Then подать команду на поднятие наверх скрипта

    ContinueLoop?

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 14:22 01-04-2009 | Исправлено: ViSiToR, 00:00 03-04-2009
    asdfzxcv



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    помогите пожалуйстаб вот есть код окошко с табами
     
    #include <GUIConstants.au3>
     
    #Region ### START Koda GUI section ### Form=
    Opt("GUICoordMode", 1)
    $Form1 = GUICreate("Form1", 323, 238, 103, 133)
    GUICtrlCreateLabel("ON test",160, 80, 91, 31)
     
    $tab=GUICtrlCreateTab (5, 1, 299, 299)
     
    $tab0=GUICtrlCreateTabitem ("tab0")
    $Button1 = GUICtrlCreateButton("Test1", 64, 80, 75, 25, 0)
     
     
    $tab1=GUICtrlCreateTabitem ( "tab1")
    $Button2 = GUICtrlCreateButton("Test2", 64, 80, 75, 25, 0)
     
     
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    select  
    Case $nMsg = $GUI_EVENT_CLOSE
    Exit
     
    case $nMsg = $tab
    GUICtrlCreateLabel("ON test",160, 80, 91, 31)
     
    case $nMsg = $Button1
        if FileExists("c:\windows") then
    $Label1 = GUICtrlCreateLabel("ON 1111", 160, 80, 91, 31)
    GUICtrlSetFont(-1, 14, 800, 2, "Monotype Corsiva")
    GUICtrlSetColor(-1, 0x0FFA00)
    Else
    $Label1 = GUICtrlCreateLabel("OFF 11111", 170, 80, 100, 31)
    GUICtrlSetFont(-1, 14, 800, 2, "Monotype Corsiva")
    GUICtrlSetColor(-1, 0xFF0000)
    EndIf
        ;------------------------------------
    case $nMsg = $Button2
        if FileExists("c:\windows2") then
    $Label2 = GUICtrlCreateLabel("ON 2222", 160, 80, 91, 31)
    GUICtrlSetFont(-1, 14, 800, 2, "Monotype Corsiva")
    GUICtrlSetColor(-1, 0x0FFA00)
    Else
    $Label2 = GUICtrlCreateLabel("OFF 2222", 160, 80, 100, 31)
    GUICtrlSetFont(-1, 14, 800, 2, "Monotype Corsiva")
    GUICtrlSetColor(-1, 0xFF0000)
    EndIf
    EndSelect
    WEnd
     
    как сделать так, что бы после нажатия кнопок их определившееся состояние запоминалось например лейбл On 1111 в табе 0 и при переходе из таба 1 в таб 0 оно опять мне показывало On 1111 а не сбрасывалось на лейбл по умолчанию On test. Это я сделал для что бы у меня лейбл одного таба не отображался в другом табе при переходе. И ещё вопрос почиму у меня лейблы отображаются в каких то прямоугольниках серого цвета, я же фон им никакой не задавал.
    Спасибо.

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 12:46 02-04-2009
    XpycTMD

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможно ли сделать Мини текстовой редактор со следующими функциями:

    • Изменения шрифта текста (Arial, Tahoma ...)
    • Изменения размера текста (10, 12, 14 ...)
    • Изменения стиля текста (Жирный, Курсив, Подчеркнутый)
    • Создание списков (Нумерованый, Маркированый)

    Если можно приведите пример скрипта.
     
     
    Зарание благодарю.

    Всего записей: 120 | Зарегистр. 17-01-2006 | Отправлено: 14:05 02-04-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