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

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

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

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

   

AddXL

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

AutoIt3

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

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

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

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

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka
    "...либо задавать список компьютеров через запятую (1,2,3 и т.д.). А затем обрабатывать эти строки соответсвующими функциями (StringRegExp; StringSplit и т.д.)"
     
    Не мог ли поподробнее обьяснить, допустим, как мне подставлять значения масиву разделяя их к примеру знаком | ?
     
    Т.е. имеем такую штуковину:

    Код:
    func mm($a, $b)
     
    Run(@ComSpec & ' /c For /R "\\"' & $a & '"\D$\" %i In (*.xlsx;*.xlsm;*.docx;*.docm;*.rtf;*.doc;*.xls;*.pdf;*.ppt;*.msg) Do echo %i | findstr /i /v "exe\>">nul && copy "%i" "U:\"' & $b & '"\Removed\%~pnxi"', '', @SW_HIDE)
     
    EndFunc

     
    куда А и В подставляются

    Код:
    func ins($i)
    for $e = 1 to $j
    if $i = $e then

     
    mm($IP[$i][1], $DIR[$i][1])

     
    и ини

    Код:
    [IP]
    1 = 192.168.20.1
    [DIR]
    1 = Removed

     
    Где и что поправить чтобы он поочередно подставлял значения из ини, например:

    Код:
    1 = 192.168.20.1 | 192.168.20.2
    [DIR]
    1 = Removed | Removed2

    Всего записей: 43 | Зарегистр. 01-02-2008 | Отправлено: 17:54 10-07-2008 | Исправлено: arr1val, 19:25 10-07-2008
    asdfzxcv



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет Всем снова Я )
    дальше продолжаю разбирать логи и возникают новые вопросы.
    Вопрос звучит так:
     
    Вот есть функция (цикл) она разбирает каждую строчку лога и если условие совпадает то показывает мне msg  
     
    $hFileRead = FileOpen(@ScriptDir&'\'&@MDAY&'-'&@MON&'-08-proxy.log', 0)  
    If $hFileRead = -1 Then exit
     
    While 1
        $ReadLine = FileReadLine($hFileRead)                
        If @error = -1 Then sleep(3000)
        $aParse = StringRegExp($ReadLine, "([0-9].*)", 3)  
        If @error Then ContinueLoop  
        If Int($aParse[0]) = 10 Then MsgBox(416,'Alert',$ReadLine)  
    WEnd  
     
    FileClose($hFileRead)  
     
    Каждый новый логфайл появлется каждый день с новым именем. (дата дня)  
    11-07-08-proxy.log
    я этот вопрос решил так:
    FileOpen(@ScriptDir&'\'&@MDAY&'-'&@MON&'-08-proxy.log', 0)
     
    1)Но непонятно, как выберать год когда макросом представляется только четырёх значеное число 2008 а мне нужно 08 (пришлось вписать его тупо в ручную).
     
    2) И самое главное, не понятно, как заставить скрипт когда наступят следующие стуки бросить старый лог-файл 11-07-08-proxy.log и взятся за разборку нового 12-07-08-proxy.log (притом только когда он появится потому что сутки перещёлкнутся то в 00.00 а люди через проксю полезут ближе к 8ми утра.)

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 13:26 11-07-2008
    Loopback



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

    Код:
    ; получим ключи и значения секции IP
    $aIPSect = IniReadSection("ini.ini", "IP")
    For $i = 1 To $aIPSect[0][0]
        ; получим значения IP
        $aCurIPGroup = StringSplit($aIPSect[$i][1], "|")
        ; ... и директорий
        $aCurDirGroup = StringSplit(IniRead("ini.ini", "DIR", $aIPSect[$i][0], "default"), "|")
        For $j = 1 To $aCurIPGroup[0]
            ; выполним функцию
            mm($aCurIPGroup[$j], $aCurDirGroup[$j])
        Next
    Next

    А вообще, такие многоуровневые списки конфигурации очень удобно в XML делать - вместо ini.

    Цитата:
    1)Но непонятно, как выберать год когда макросом представляется только четырёх значеное число 2008 а мне нужно 08 (пришлось вписать его тупо в ручную).


    Код:
    StringTrimLeft(@YEAR, 2)


    Цитата:
    2) И самое главное, не понятно, как заставить скрипт когда наступят следующие стуки бросить старый лог-файл 11-07-08-proxy.log и взятся за разборку нового 12-07-08-proxy.log (притом только когда он появится потому что сутки перещёлкнутся то в 00.00 а люди через проксю полезут ближе к 8ми утра.)

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

    Всего записей: 174 | Зарегистр. 08-03-2002 | Отправлено: 13:40 11-07-2008 | Исправлено: Loopback, 13:42 11-07-2008
    Maza Faka



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

    Цитата:
    а не подскажеш как это сделать

    Можно и без CallBack функции

    Код:
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
     
    Dim $Label[6], $hLine[6]
     
    $Form1 = GUICreate("Form1", 633, 454, -1, -1, BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SYSMENU, $WS_CAPTION, _
                                                          $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, _
                                                          $WS_SIZEBOX))
     
    $vLine = GUICtrlCreateLabel("", 155, 75, 1, 195)
    GUICtrlSetBkColor(-1, 0xFF0000)
     
    Dim $aGraphPos = ControlGetPos($Form1, "", $vLine)
    Global $Height = $aGraphPos[3]
     
    Local $LabelTop = 95, $hLineTop = 120
     
    For $i = 1 To 5
      $Label[$i] = GUICtrlCreateLabel("Label1", 20, $LabelTop, 131, 20, $WS_BORDER)
      GUICtrlSetResizing(-1, BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKHEIGHT))
     
      $hLine[$i] = GUICtrlCreateGraphic(6, $hLineTop, 300, 1)
      GUICtrlSetResizing(-1, BitOR($GUI_DOCKLEFT, $GUI_DOCKTOP, $GUI_DOCKHEIGHT))
      GUICtrlSetBkColor(-1, 0x000000)
     
      $LabelTop += 30
      $hLineTop += 30
    Next
     
    GUISetState(@SW_SHOW)
     
    While 1
      $nMsg = GUIGetMsg()
      Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $GUI_EVENT_RESIZED, $GUI_EVENT_MAXIMIZE, $GUI_EVENT_RESTORE
            _Resize()
      EndSwitch
    WEnd
     
    Func _Resize()
        Local $aLabelPos = ControlGetPos($Form1, "", $Label[1])
        GUICtrlSetPos($vLine, $aLabelPos[0] + $aLabelPos[2] + 5, $aLabelPos[1] - 20, 1, $Height)
    EndFunc


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



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

    Цитата:
    Код:StringTrimLeft(@YEAR, 2)

    Цитата:
    Код:StringTrimLeft(@YEAR, 2)

    Спасибо получилось
     

    Цитата:
    Цитата:2) И самое главное, не понятно, как заставить скрипт когда наступят следующие стуки бросить старый лог-файл 11-07-08-proxy.log и взятся за разборку нового 12-07-08-proxy.log (притом только когда он появится потому что сутки перещёлкнутся то в 00.00 а люди через проксю полезут ближе к 8ми утра.)  
     
     
    Не очень понятно в чем проблема. Отслеживать время, и при наступлении нового дня закрыть старый файл и открыть новый, с другим именем.

     
    помогите не получается.
    я непойму сам принцип, это как то страую дату надо помещат ьв массив а потом сранивать текщую со старой? и не получается выйти из цикла while что бы эту дату перепроверить.
    в общем каша.

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 14:05 11-07-2008 | Исправлено: asdfzxcv, 14:43 11-07-2008
    arr1val

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Loopback
    Спасибо большое ! Чуть изменил и подправил, но без концепции не получилось бы. Спасибо!

    Всего записей: 43 | Зарегистр. 01-02-2008 | Отправлено: 15:27 11-07-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопросик:
    Можно ли отследить изменения ClipBoard ?
    Вариант с запоминанием и сравнением не слишком корректен.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:55 11-07-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    NIKZZZZ 16:55 11-07-2008
    Цитата:
    Можно ли отследить изменения ClipBoard ?

    Можно, вот пример:
     

    Код:
    #include <GUIConstants.au3>
     
    HotKeySet("{ESC}", "OnAutoItExit")
     
    Global Const $WM_DRAWCLIPBOARD  = 0x0308
    Global Const $WM_CHANGECBCHAIN  = 0x030D
     
    Global $hOrigWND, $hClip_Hook_GUI
    SetClipboardViewer()
     
    Global $iToolTipTimer = -1
     
    While 1
        Sleep(10)
     
        If $iToolTipTimer <> -1 And TimerDiff($iToolTipTimer) > 5000 Then
            $iToolTipTimer = -1
            ToolTip("")
        EndIf
    WEnd
     
    Func
    SetClipboardViewer()
        $hClip_Hook_GUI = GUICreate("_Clip_Hook_")
     
        ; remember last clip viewer in queue and set our GUI as first in queue
        $hOrigWND = DLLCall("user32.dll", "hwnd", "SetClipboardViewer", "hwnd", $hClip_Hook_GUI)
        $hOrigWND = $hOrigWND[0]
     
        GUIRegisterMsg($WM_DRAWCLIPBOARD, "OnClipBoardChange")
        GUIRegisterMsg($WM_CHANGECBCHAIN, "OnClipBoardViewerChange")
    EndFunc
     
    Func
    OnClipBoardChange($hWnd, $Msg, $wParam, $lParam)
        ; do what you need when clipboard changes
        ToolTip(ClipGet(), 0, 0)
        $iToolTipTimer = TimerInit()
     
        ;send notification about clipboard change to next clipviewer
        DllCall("user32.dll", "int", "SendMessage", "hWnd", $hOrigWND, "int", $WM_DRAWCLIPBOARD, "int", $wParam, "int", $lParam)
    EndFunc
     
    Func
    OnClipBoardViewerChange($hWnd, $Msg, $wParam, $lParam)
        ; if our remembered previous clipviewer is removed then we must remember new next clipviewer
        ; else send notification about clipviewer change to next clipviewer

        If $wParam = $hOrigWND Then
            $hOrigWND = $lParam
        Else
            DllCall("user32.dll", "int", "SendMessage", "hWnd", $hOrigWND, "int", $WM_CHANGECBCHAIN, "hwnd", $wParam, "hwnd", $lParam)
        EndIf
    EndFunc
     
    Func
    OnAutoItExit()
        If @HotKeyPressed = "{ESC}" Then Exit
     
        ;send notification that we no longer will be in clipboard hook queue
        DLLCall("user32.dll", "int", "ChangeClipboardChain", "hwnd", $hClip_Hook_GUI, "hwnd", $hOrigWND)
    EndFunc

     

    Цитата:
    Вариант с запоминанием и сравнением не слишком корректен.

    Зато не вызывает конфликт с другими программами следящими за буфером обмена (aka Менеджеры б. обмена ).

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 19:37 11-07-2008 | Исправлено: ViSiToR, 19:39 11-07-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Ok.
    Приведенный пример позволяет отслеживать буфер, даже если в него повторно копируется таже информация.  

    Цитата:
    Зато не вызывает конфликт с другими программами следящими за буфером обмена (aka Менеджеры б. обмена ).

    У меня стоит ClCl, проблем пока не видел.
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:51 11-07-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    NIKZZZZ 22:51 11-07-2008
    Цитата:
    У меня стоит ClCl, проблем пока не видел.

    Да, действительно, CLCL не конфликтует, но я привык к ClipDiary, с ним есть траблы
     
    Я кстати как то сам хотел написать подобный менеджер, AutoIt вроде имеет подходящие интсрументы, но вот руки всё никак не дотянутся... да и времени не хватает

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

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



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

    Цитата:
    Да, действительно, CLCL не конфликтует, но я привык к ClipDiary, с ним есть траблы

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

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 12:41 12-07-2008 | Исправлено: NIKZZZZ, 12:45 12-07-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    NIKZZZZ 12:41 12-07-2008
    Цитата:
    можно ли полностью перехватить ClipBoard так, чтобы менеджер этого не увидел ?

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

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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Делаю фоновую картинку на форму, и на ней расставляю кнопки.
    Так вот - при наличии картинки кнопки не нажимаются. В том смысле, что визуально изображение кнопки не утапливается, и не выполняется функция OnEvent(кнопка, функция кнопки). Причем не нажимаются мышкой, если кнопкой Tab выбрать кнопку и нажать пробел, то кнопка работает. Как только комментирую строку с картинкой, все кнопки начинают нажиматься нормально. Обработку клика на картинку отключил, клик на форму тоже не обрабатывается, не могу понять причину. А картинка принципиально нужна.

    Код:
    $Form = GUICreate("Form1", 650, 660, 198, 102)
    GUISetOnEvent($GUI_EVENT_CLOSE, "FormClose")
     
    GUICtrlCreatePic("X:\metro_map.jpg", 0, 0, 650, 720)
     
    $vyb = GUICtrlCreateButton("", 392, 165, 17, 17, 0)
    GUICtrlSetOnEvent($vyb, "vybClick")
     
    ;Дальше идет много кнопок и OnEvent...
    ;В конце код для всех кнопок типа:

     
    Func akaClick()
    ;код
    EndFunc

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 18:38 12-07-2008 | Исправлено: Hackproof, 21:44 12-07-2008
    asdfzxcv



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

    Код:
    while 1
    $d= (@MDAY&'-'&@MON&'-'&StringTrimLeft(@YEAR, 2))
    while 1
    $f=(@MDAY&'-'&@MON&'-'&StringTrimLeft(@YEAR, 2))
     if string($d) <> $f Then exitloop
    WEnd

    MsgBox(416,'Alert','no- переход на следующие сутки')
    wend

     

    Цитата:
    И почему у меня код не раскрашивается?

    Воспользуйся программой из шапки.

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 21:05 12-07-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Hackproof 18:38 12-07-2008
    Цитата:
    при наличии картинки кнопки не нажимаются

    Трюк для обхода этой проблемы довольно прост... нужно использовать стиль $WS_CLIPSIBLINGS у контроля изображения, но для некоторых контролей сами кнопки нужно создавать раньше. Вот пример с кнопкой внутри Input'а:
     

    Код:
    #include <GUIConstants.au3>
     
    $Gui = GuiCreate("Test", 320, 100)
     
    $Button = GUICtrlCreateButton("...", 290, 42, 18, 18)
    $Input = GUICtrlCreateInput("C:\", 10, 40, 300, 22, $WS_CLIPSIBLINGS)
     
    GUISetState()
     
    While 1
        $Msg = GUIGetMsg()
        Switch $Msg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd

     
    А вот пример с картинкой (тут ещё можно вместо стиля $WS_CLIPSIBLINGS просто задисейблить картинку):
     

    Код:
    #include <GuiConstants.au3>
     
    $GUI = GUICreate("Test Script", 300, 200)
     
    GUICtrlCreatePic(@Systemdir & "\oobe\images\mslogo.jpg", 0, 0, 300, 200, $WS_CLIPSIBLINGS)
    ;GUICtrlSetState(-1, $GUI_DISABLE)
     
    $Button = GUICtrlCreateButton("Button", 220, 160, 60, 20)
     
    GUISetState(@SW_SHOW, $GUI)
     
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case
    $Button
                MsgBox(64, "", "Button clicked")
        EndSwitch
    WEnd

     
     
    Добавлено:
    asdfzxcv 21:05 12-07-2008
    Цитата:
    правельно ли я написал алгоритм отслеживания перехода на навые сутки компьютера?

    Думаю да, но именно такой расклад будет вызывать большую нагрузку на процессор, лучше так:
     

    Код:
    HotKeySet("{ESC}", "Quit")
     
    While 1
        $sCurrentCycle = @MDAY & '-' & @MON & '-' & StringTrimLeft(@YEAR, 2)
        $sNextCycle = $sCurrentCycle
     
        While $sNextCycle = $sCurrentCycle
            $sNextCycle
    = @MDAY & '-' & @MON & '-' & StringTrimLeft(@YEAR, 2)
            Sleep(100)
        WEnd
     
        MsgBox(416, 'Alert', StringFormat('Переход на следующие сутки [%s]', $sNextCycle))
    WEnd
     
    Func
    Quit()
        Exit
    EndFunc


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 05:03 13-07-2008
    XpycTMD

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka 13:47 11-07-2008
    Цитата:
    Можно и без CallBack функции    

    Спасибо большое то что надо

    Всего записей: 120 | Зарегистр. 17-01-2006 | Отправлено: 09:12 13-07-2008
    Hackproof



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

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 14:26 13-07-2008
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А есть возможность работы с почтой? Мне нужно забирать почту с pop3 ящика и складировать письма в отдельные файлы.
    В инклудах есть inet.au3, но вдруг есть где подробнее об этом почитать + с примерами? И в нем не приема писем

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 19:49 13-07-2008 | Исправлено: timsky, 20:03 13-07-2008
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Накатал дорген для друга:
    1) Берет файл шаблона и кейвордов из INI
    2) Берет кейворды построчно, заменяет ими ключевое слово в шаблоне и сохраняет как КЕЙВОРД.html
     

    Код:
    ;====================================== Запрет запуска нескольких окон =================================================
    If WinExists(@ScriptName) Then Exit
    AutoItWinSetTitle(@ScriptName)
     
    DirCreate("Ready")
     
    ;====================================== Грузим шаблон =================================================
    $Template = IniRead("config.ini","Main","Template","")
     
    $source =  FileOpen ($Template, 0)
    ; Проверка возможности открытия файла
    If $source = -1 Then
        MsgBox(16, "Отсутствует шаблон!!!", "Нужен файл " & $Template & " в этой папке")
        Exit
    EndIf
     
    FileClose($source)
     
    ;====================================== Грузим кейворды =================================================
    $KeywordsFile = IniRead("config.ini","Main","KeywordsFile","")
     
    $keywords = FileOpen($KeywordsFile, 0)
    ; Проверка возможности открытия файла
    If $keywords = -1 Then
        MsgBox(16, "Отсутствует шаблон!!!", "Нужен файл " & $KeywordsFile & " в этой папке")
        Exit
    EndIf
     
    ;====================================== Дергаем кеи построчно и втыкаем в новые файлы =================================================
    While 1
        $key = FileReadLine($keywords)
        If @error = -1 Then ExitLoop
        $source =  FileOpen ($Template, 0)
        $content = FileRead ($source)
        $contentNew = StringRegExpReplace ( $content, "<!--KEYWORD-->", $key )
        FileWrite ( "Ready\" & $key & ".html", $contentNew )
    Wend
     
    FileClose($source)
    FileClose($keywords)
     
    MsgBox (64, "Готово!" , "Шеф, усё готово!")

     
    Работает превосходно на файлах не более 500 строк Т.е. если файл с кейвордами более 500 строк, то прога завершает работу как будто все сделала, но на самом деле генерит около 500 файлов (от 497 до 505)
    В чем проблема?
    Как это ограничение обойти?
     
    Вот необходимые для работы доргена файлы (конфиг, шаблон и кейворды нагенереные для теста):
    http://www.rapidshare.ru/729490
     
    Пробовал и на реальных кейвордах - то же самое. Эти кеи нагенерил для теста.

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 04:43 14-07-2008 | Исправлено: timsky, 04:48 14-07-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    timsky 04:43 14-07-2008
    Цитата:
    В чем проблема?  
     Как это ограничение обойти?

    Проблема в том что в цикле постоянно вызывается FileOpen(), но закрывается он всего один раз и вне цикла, тут видимо есть ограничение на количество одновременных открытии файла (без закрытия).
    В этом конкретном случае, как я понимаю, это лишнее, $content можно заполнить один раз перед началом цикла, также как и $contentNew:
     

    Код:
    ;====================================== Запрет запуска нескольких окон ================================
    If WinExists(@ScriptName) Then Exit
    AutoItWinSetTitle(@ScriptName)
     
    DirCreate("Ready")
     
    ;====================================== Грузим шаблон =================================================
    $Template = IniRead("config.ini", "Main", "Template", "")
     
    $source = FileOpen($Template, 0)
    ; Проверка возможности открытия файла
    If $source = -1 Then
        MsgBox(16, "Отсутствует шаблон!!!", "Нужен файл " & $Template & " в этой папке")
        Exit
    EndIf

     
    FileClose($source)
     
    ;====================================== Грузим кейворды ===============================================
    $KeywordsFile = IniRead("config.ini", "Main", "KeywordsFile", "")
     
    $keywords = FileOpen($KeywordsFile, 0)
    ; Проверка возможности открытия файла
    If $keywords = -1 Then
        MsgBox(16, "Отсутствует шаблон!!!", "Нужен файл " & $KeywordsFile & " в этой папке")
        Exit
    EndIf

     
    ;====================================== Дергаем кеи построчно и втыкаем в новые файлы =================
     
    $content = FileRead($Template)
    $contentNew = StringRegExpReplace($content, "<!--KEYWORD-->", $key)
     
    While 1
        $key = FileReadLine($keywords)
        If @error = -1 Then ExitLoop
     
        FileWrite("Ready\" & $key & ".html", $contentNew)
    WEnd
     
    FileClose($keywords)
     
    MsgBox(64, "Готово!", "Шеф, усё готово!")


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

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

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138

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


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru