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


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

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

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

Открыть новую тему    

Widok



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

AutoIt3
(Часть 1)

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

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

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


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

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



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Z4masko
    по идее, откомпелированный файл, сможет вывести подобную ошибку только вместе с "крахом" данной программы. т.к. это ошибка для откомпелированного файла станет критической.....и в откомпелированном файле уже же нет как такового "кода autoit программы"...
     
     
    а в редакторе показываются ошибки/предупреждения, потому что на всем этапе запуска скрипта он ...скореее всего....в полном подчинниее у компилятора и тот, как то ведет его по коду программы, потому компилятор и видет строчку где произошла "критическая ошибка".....
     
    а в exe файле, уже некому следить за ошибками проги, ну толькое если не использовать какой нить баг-регистр....но он сможет показать только биты/байты exe файла на которых "рухнула программа"...

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Z4masko 12:45 06-02-2009
    Цитата:
    Хотелось бы создать на своём GUI интерфейсе программы какой-нить Label, в который будет выводится эта консольная информация об ошибках и предупреждениях функций

    Самое близкое, это как раз обсуждаемы на последних страницах AutoItErrorHandler, но выводить в GUI ничего не будет, т.к после краха скрипт больше не может продолжить свою работу, единственная опция это запуск скрипта сначала (в диалоге после краха).
     
    Добавлено:
    sproxy 13:46 06-02-2009
    Цитата:
    в откомпелированном файле уже же нет как такового "кода autoit программы"

    Вообще то есть, он просто зашифрован, ведь декомпилляция была возможна когда-то(?)
    Но дело в другом, в момент обработки нет возможности извлечь этот код, это придётся декомпиллировать в реальном времени (a.k.a «Run-Time»), на что уйдёт время и ресурсы.
     

    Цитата:
    на всем этапе запуска скрипта он ...скореее всего....в полном подчинниее у компилятора

    У интерпретатора

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 10:14 07-02-2009 | Исправлено: ViSiToR, 10:16 07-02-2009
    sproxy



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

    Цитата:
    У интерпретатора

    это точно, это я от безграматности...

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



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    1. есть ли технология/метод - как узнать какое окно (не autoit) сейчас находится под курсором?
     
    2. есть ли возможность передать mouse click в точну нахождения курсора (любой: левый, правый, что угодно), что бы окно, которое находилось под курсором, стало активным, но могыу click в это окно не передовался?
     
    3. есть ли комманды: перемещения окна и изминения размера окна?
    т.е. выслал окну комманду перемещения и окно будет следовать за курсором, пока не получит комманду отмены перемещения (как если бы тянеть окно за заголовок)?

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 02:19 08-02-2009
    Цитата:
    как узнать какое окно (не autoit) сейчас находится под курсором?

     
    С помощью WindowFromPoint:
     

    Код:
    HotKeySet("{ESC}", "Quit")
     
    While 1
        Sleep(100)
     
        $aMPos = MouseGetPos()
        $hWnd = WindowFromPoint($aMPos[0], $aMPos[1])
        $Title = WinGetTitle($hWnd)
     
        If StringInStr($Title, @LF) Then $Title = StringLeft($Title, StringInStr($Title, @LF)-2)
        If $Title = "" Then $Title = "No Title [probably a control handle]"
     
        If $hWnd <> WinGetHandle("[CLASS:tooltips_class32]") Then ToolTip($hWnd & " = " & $Title, 0, 0)
    WEnd
     
    Func
    WindowFromPoint($XPoint, $YPoint)
        Local $aResult = DllCall("User32.dll", "hwnd", "WindowFromPoint", "int", $XPoint, "int", $YPoint)
        Return $aResult[0]
    EndFunc
     
    Func
    Quit()
        Exit
    EndFunc

     

    Цитата:
    2. есть ли возможность

    Перефразируй, ничего толком не понял
     

    Цитата:
    есть ли комманды: перемещения окна и изминения размера окна?

    WinMove?
     

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

    Нужно строить механизм слежения, типа такого.
     


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

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



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

    Цитата:
    С помощью WindowFromPoint:

    благодраю - то что нужно.
     

    Цитата:
    Перефразируй, ничего толком не понял  

    знаю WindowFromPoint другого уже не надо....
     

    Цитата:
    Нужно строить механизм слежения, типа такого.

    ...подумал, може есть реализация как то через win amp или еще как то - без ручной слежки...

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 04:16 08-02-2009
    Цитата:
    може есть реализация как то через win amp

    Возможно имеется в виду WinAPI а не winamp?  
     

    Цитата:
     без ручной слежки

    Мне не известен такой метод.

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

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

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

    Цитата:
    Подскажите, каким образом можно откомпилировать скрипт, чтобы при его запуске не вылетал UAC с сообщением о том, что "Неопознанная программа хочет получить доступ к этому компьютеру. Издатель не известен"?

     
    ViSiToR

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

    Да, действительно, не заметил в начале скрипта #RequireAdmin.
     
    offtopic: ViSiToR скажите, как (чем) вы такие функциональные цитаты делаете?
     
    Не смог сам разобраться и в хелпе не нашел, как сделать, чтобы в GUI веб ссылки и e-mail ссылки были "живыми". Это возможно сделать в AutoIt?

    Всего записей: 55 | Зарегистр. 01-02-2009 | Отправлено: 16:27 09-02-2009 | Исправлено: vbrv, 16:27 09-02-2009
    sproxy



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

    Цитата:
    Не смог сам разобраться и в хелпе не нашел, как сделать, чтобы в GUI веб ссылки и e-mail ссылки были "живыми". Это возможно сделать в AutoIt?

    т.е. при наведение что бы ссылка меняла цвет (или еще что-то) - то попробуй это
     
     
    либо делать самому обработку, пример из справки:

    Код:
    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GUIConstantsEx.au3>
    #include <GuiButton.au3>
    #include <WindowsConstants.au3>
     
    Opt("MustDeclareVars", 1)
     
    Global $btn, $rdo, $chk, $iMemo
     
    ; Note the controlId from these buttons can NOT be read with GuiCtrlRead
     
    _Main()
     
    Func _Main()
        Local $hGUI
     
        $hGUI
    = GUICreate("Buttons", 400, 400)
        $iMemo = GUICtrlCreateEdit("", 119, 10, 276, 374, $WS_VSCROLL)
        GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
     
        $btn = _GUICtrlButton_Create($hGUI, "Button1", 10, 10, 90, 50)
     
        $rdo = _GUICtrlButton_Create($hGUI, "Radio1", 10, 60, 90, 50, $BS_AUTORADIOBUTTON)
     
        $chk = _GUICtrlButton_Create($hGUI, "Check1", 10, 120, 90, 50, $BS_AUTO3STATE)
     
        GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
        GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
     
        GUISetState()
     
        MemoWrite("$btn handle: " & $btn)
        MemoWrite("$rdo handle: " & $rdo)
        MemoWrite("$chk handle: " & $chk & @CRLF)
     
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
            EndSwitch
        WEnd
     
        Exit
     
    EndFunc
      ;==>_Main
     
    ; Write a line to the memo control

    Func MemoWrite($sMessage)
        GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
    EndFunc   ;==>MemoWrite
     
    Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
        #forceref $hWnd, $Msg, $wParam
        Local Const $BCN_HOTITEMCHANGE = -1249
        Local $tNMBHOTITEM = DllStructCreate("hwnd hWndFrom;int IDFrom;int Code;dword dwFlags", $lParam)
        Local $nNotifyCode = DllStructGetData($tNMBHOTITEM, "Code")
        Local $nID = DllStructGetData($tNMBHOTITEM, "IDFrom")
        Local $hCtrl = DllStructGetData($tNMBHOTITEM, "hWndFrom")
        Local $dwFlags = DllStructGetData($tNMBHOTITEM, "dwFlags")
        Local $sText = ""
     
        Switch $nNotifyCode
            Case $BCN_HOTITEMCHANGE ; Win XP and Above
                If BitAND($dwFlags, 0x10) = 0x10 Then
                    $sText = "$BCN_HOTITEMCHANGE - Entering: " & @CRLF
     
                ElseIf BitAND($dwFlags, 0x20) = 0x20 Then
                    $sText = "$BCN_HOTITEMCHANGE - Leaving: " & @CRLF
                EndIf
                MemoWrite($sText & _
                        "-----------------------------" & @CRLF & _
                        "WM_NOTIFY - Infos:" & @CRLF & _
                        "-----------------------------" & @CRLF & _
                        "Code" & @TAB & ":" & $nNotifyCode & @CRLF & _
                        "CtrlID" & @TAB & ":" & $nID & @CRLF & _
                        "CtrlHWnd:" & $hCtrl & @CRLF & _
                        _GUICtrlButton_GetText($hCtrl) & @CRLF)
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY
     
    ; React on a button click
    Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
        #forceref $hWnd, $Msg
        Local $nNotifyCode = BitShift($wParam, 16)
        Local $nID = BitAND($wParam, 0x0000FFFF)
        Local $hCtrl = $lParam
        Local $sText = ""
     
        Switch $hCtrl
            Case $btn, $rdo, $chk
                Switch $nNotifyCode
                    Case $BN_CLICKED
                        $sText = "$BN_CLICKED" & @CRLF
                    Case $BN_PAINT
                        $sText = "$BN_PAINT" & @CRLF
                    Case $BN_PUSHED, $BN_HILITE
                        $sText = "$BN_PUSHED, $BN_HILITE" & @CRLF
                    Case $BN_UNPUSHED, $BN_UNHILITE
                        $sText = "$BN_UNPUSHED" & @CRLF
                    Case $BN_DISABLE
                        $sText = "$BN_DISABLE" & @CRLF
                    Case $BN_DBLCLK, $BN_DOUBLECLICKED
                        $sText = "$BN_DBLCLK, $BN_DOUBLECLICKED" & @CRLF
                    Case $BN_SETFOCUS
                        $sText = "$BN_SETFOCUS" & @CRLF
                    Case $BN_KILLFOCUS
                        $sText = "$BN_KILLFOCUS" & @CRLF
                EndSwitch
                MemoWrite($sText & _
                        "-----------------------------" & @CRLF & _
                        "WM_COMMAND - Infos:" & @CRLF & _
                        "-----------------------------" & @CRLF & _
                        "Code" & @TAB & ":" & $nNotifyCode & @CRLF & _
                        "CtrlID" & @TAB & ":" & $nID & @CRLF & _
                        "CtrlHWnd:" & $hCtrl & @CRLF & _
                        _GUICtrlButton_GetText($hCtrl) & @CRLF)
                Return 0 ; Only workout clicking on the button
        EndSwitch
        ; Proceed the default Autoit3 internal message commands.
        ; You also can complete let the line out.
        ; !!! But only 'Return' (without any value) will not proceed
        ; the default Autoit3-message in the future !!!
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_COMMAND

     
     
    Добавлено:
    Справка по функциональности цитат - коды форума...........................................
     
    Добавлено:
    привер живой ссылки используя udf Визитора:
     

    Код:
    #include <GUIConstantsEx.au3>
    #include <GUICtrlSetOnHover_UDF.au3>
    ;
     
    GUICreate("GUICtrlSetOnHover GUI DEMO", 280, 200)
     
    $Button = GUICtrlCreateButton("Button", 20, 40, 100, 20)
    _GUICtrl_SetOnHover(-1, "_Hover_Func", "_Hover_Func")
     
    $Label = GUICtrlCreateLabel("Label", 200, 40, 28, 15)
    GUICtrlSetFont($Label, 8.5)
    GUICtrlSetCursor($Label, 0)
    _GUICtrl_SetOnHover($Label, "_Hover_Func", "_Hover_Func")
     
    $CheckBox = GUICtrlCreateCheckbox("CheckBox", 20, 120)
    _GUICtrl_SetOnHover($CheckBox, "_Hover_Func", "_Hover_Func")
     
    $Edit = GUICtrlCreateEdit("Edit", 150, 120, 100, 50)
    _GUICtrl_SetOnHover($Edit, "_Hover_Func", "_Hover_Func")
     
    GUISetState()
     
    While 1
        $Msg = GUIGetMsg()
        Switch $Msg
            Case -3
                Exit
        EndSwitch
    WEnd
     
    Func
    _Hover_Func($iCtrlID, $iParam)
        Local $sConsole_Data = "Hovered"
     
        Local $sButton_Text = "Hover Button"
        Local $iLabel_Color = 0x00000FF
        Local $iLabel_FontAttrib = 4
        Local $iCheckBox_State = $GUI_CHECKED
        Local $sEdit_Data = "New Edit Data"
     
        If $iParam = 2 Then ;Indicates On *Leave* Hover process
            $sConsole_Data = "NOT Hovered"
     
            $sButton_Text = "Button"
            $iLabel_Color = 0x000000
            $iLabel_FontAttrib = 0
            $iCheckBox_State = $GUI_UNCHECKED
            $sEdit_Data
    = "Edit Data"
        EndIf
     
        Printf("Control " & $iCtrlID & " [Data: " & GUICtrlRead($iCtrlID, 1) & "] Is Now " & $sConsole_Data)
     
        Switch $iCtrlID
            Case $Button
                If GUICtrlRead($iCtrlID) <> $sButton_Text Then GUICtrlSetData($iCtrlID, $sButton_Text)
            Case $Label
                GUICtrlSetColor($iCtrlID, $iLabel_Color)
                GUICtrlSetFont($iCtrlID, Default, Default, $iLabel_FontAttrib)
            Case $CheckBox
                GUICtrlSetState($iCtrlID, $iCheckBox_State)
            Case $Edit
                If GUICtrlRead($iCtrlID) <> $sEdit_Data Then GUICtrlSetData($iCtrlID, $sEdit_Data)
        EndSwitch
    EndFunc
     
    Func
    Printf($Str, $Line=@ScriptLineNumber)
        ConsoleWrite("!===========================================================" & @LF & _
                    "+======================================================" & @LF & _
                    "--> Script Line (" & $Line & "):" & @LF & "!" & @TAB & $Str & @LF & _
                    "+======================================================" & @LF)
    EndFunc

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 18:37 09-02-2009
    araneon



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как сделать что бы чёрное окно после @comspec закрывалось?

    Всего записей: 152 | Зарегистр. 18-07-2008 | Отправлено: 19:01 09-02-2009 | Исправлено: araneon, 19:06 09-02-2009
    Hackproof



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

    Код:
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    $Form1 = GUICreate("Form1", 539, 326, 193, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $Tab1 = GUICtrlCreateTab(40, 32, 313, 265)
    GUICtrlSetResizing($Tab1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    $TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
    $TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
    $TabSheet3 = GUICtrlCreateTabItem("TabSheet3")
    GUICtrlSetState($TabSheet3,$GUI_SHOW)
    GUICtrlCreateTabItem("")
    $Button1 = GUICtrlCreateButton("Button1", 376, 152, 97, 41, 0)
    GUICtrlSetOnEvent($Button1, "Button1Click")
    GUISetState(@SW_SHOW)
     
    While 1
        Sleep(100)
    WEnd
     
    Func
    Button1Click()
    ???
    EndFunc
    Func
    Form1Close()
    Exit
    EndFunc

    Как можно получить заголовок вкладки в переменную по нажатию кнопки? Именно текст, который написан в заголовке. По-другому их сложно сортировать...
     
    И еще проблема - если создавать кнопки на вкладках не в самом начале, а где-нибудь из функции через минуту - то кнопка висит на всех вкладках. Хорошо бы, если она будет оставаться на одной вкладке, той, которая была активна в момент создания кнопки.

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 19:20 09-02-2009 | Исправлено: Hackproof, 19:26 09-02-2009
    zpmaloy

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Такой вопрос. У меня программа сканирует винт на наличие определенных файлов и закачует их на ФТП через аутоит, файлы к примеру по 1-2 метра и если выключить или перезагрузить компьютер то потом начинается все заного если оно не докачала все ... так вот можно ли както сохранять прогресс и после включения начать опять оттуда !?
    И можно ли както дождаться завершения функции .. Я догадываюсь что прога не пойдет дальше по коду пока функция не закончится но у меня опятьже куча файлов и  4 функции каждая отвечающая за закачку файлов с определнных мест на фтп и когда я подрят пишу _func1()  
    _func2()
    func(3)
    Когда запускаю получается бред какойто Отдельно функции работают ! Но вместе файлы неуспевают закачиваться и вобщем не закачивается совсем или по 1-2 файла и бывают даже не полностью, ошибок не выдает ...

    Всего записей: 3 | Зарегистр. 09-02-2009 | Отправлено: 21:29 09-02-2009
    sproxy



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

    Цитата:
    так вот можно ли както сохранять прогресс

    ...эм...можно просто каждый удачно закаченный файл на ftp записывать в txt файл и при каждом повтороном запуске срипта или функции в момент перед закачкой файла на ftp проверять его наличии в файле txt и если есть, то пропускать закачку его и переходить к следующему файлу и т.к. по все файлам...
     

    Цитата:
    Я догадываюсь что прога не пойдет дальше по коду пока функция не закончится  

    верно.
    ..можно использовать функцию Return, к примеру если файл уже был закачан на ftp, т.е. запись о нем была найдена в файле txt, то вызвать функцию Return (она завершает выполнение текущей функции и продолжает выполнение в то место где функция была вызвана, а если запесь о файле не была найденна в файле txt - то закачать его на ftp...
     

    Цитата:
    Когда запускаю получается бред какойто Отдельно функции работают

    уммм.....уверен это из за неправельного расположения серии андроменды в фазе сириуса ))) проще говря пишу тут весь код скрипта - так легче будет разобраться ))
     

    Цитата:
    Но вместе файлы неуспевают закачиваться и вобщем не закачивается совсем или по 1-2 файла и бывают даже не полностью, ошибок не выдает ...

    эт странноо...у меня ftp udf работала исправно - все закачивала -  в нужном колличестве и нужном размере =ъ
     
     
    Добавлено:

    Цитата:
    Как можно получить заголовок вкладки в переменную по нажатию кнопки? Именно текст, который написан в заголовке.

    можно вот так:
     

    Код:
    #region: - Option
        AutoItSetOption ('GUIOnEventMode',      1)
        AutoItSetOption ('MustDeclareVars',     1)
        AutoItSetOption ('TrayIconDebug',       1)
        AutoItSetOption ('TrayIconHide',        0)
    #endregion
     
    #region: - Include

        #include <GuiConstantsEx.au3>
        #Include <GuiTab.au3>
        #Include <TabConstants.au3>
        #include <WindowsConstants.au3>
    #endregion
     
    Global  $win_main, $tab, $tab_0, $tab_0_ok, $tab_0_input, $tab_1
     
    $win_main
      =   GUICreate('Tab', 400, 400, -1, -1)
                    GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit_pro')
     
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
     
    $tab = GUICtrlCreateTab(10, 10, 350, 350)
     
    $tab_0 = GUICtrlCreateTabitem('Tab_0')
    GUICtrlCreateLabel('Label_0', 30, 80, 50, 20)
    $tab_0_ok = GUICtrlCreateButton('OK', 20, 50, 50, 20)
    $tab_0_input = GUICtrlCreateInput('default', 80, 50, 70, 20)
     
    $tab_1 = GUICtrlCreateTabitem('Tab_1')
     
    GUICtrlCreateTabitem ('')
    GUISetState ()
     
    While 1
        Sleep(100)
    WEnd
     
    Func
    _Exit_pro()
        Exit
    EndFunc
     
    Func
    WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        #forceref $hWnd, $iMsg, $iwParam
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTab
        $hWndTab
    = $tab
        If Not IsHWnd($tab) Then $hWndTab = GUICtrlGetHandle($tab)
     
        $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
        $iIDFrom = DllStructGetData($tNMHDR, 'IDFrom')
        $iCode = DllStructGetData($tNMHDR, 'Code')
        Switch $hWndFrom
            Case $hWndTab
                Switch $iCode
                    Case $NM_CLICK
                        MsgBox(0, '', 'Одинарный левый Click' & @CRLF & 'Активна вкладка: ' & _GUICtrlTab_GetCurFocus($hWndTab) & @CRLF & 'Текст вкладки: ' & _GUICtrlTab_GetItemText($hWndTab, _GUICtrlTab_GetCurFocus($hWndTab)))
                    Case $NM_DBLCLK
                        MsgBox(0, '', 'Двойной левый Click' & @CRLF & 'Активна вкладка: ' & _GUICtrlTab_GetCurFocus($hWndTab) & @CRLF & 'Текст вкладки: ' & _GUICtrlTab_GetItemText($hWndTab, _GUICtrlTab_GetCurFocus($hWndTab)))
                    Case $NM_RCLICK
                        MsgBox(0, '', 'Одинарный правый Click' & @CRLF & 'Активна вкладка: ' & _GUICtrlTab_GetCurFocus($hWndTab) & @CRLF & 'Текст вкладки: ' & _GUICtrlTab_GetItemText($hWndTab, _GUICtrlTab_GetCurFocus($hWndTab)))
                    Case $NM_RDBLCLK
                        MsgBox(0, '', 'Двойной правый Click' & @CRLF & 'Активна вкладка: ' & _GUICtrlTab_GetCurFocus($hWndTab) & @CRLF & 'Текст вкладки: ' & _GUICtrlTab_GetItemText($hWndTab, _GUICtrlTab_GetCurFocus($hWndTab)))
                EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    vbrv 16:27 09-02-2009
    Цитата:
    как (чем) вы такие функциональные цитаты делаете?

    В Opera, используя Панель и меню со смайликами и BBCode для Opera (380Kb). Там есть кнопка «Цитата», хотя у меня оно на хоткее висит.
     
    araneon 19:01 09-02-2009
    Цитата:
     как сделать что бы чёрное окно после @comspec закрывалось?

    Использовать @SW_HIDE в качестве 3-его параметра в функции Run.
     
    Hackproof 19:20 09-02-2009
    Цитата:
    Хорошо бы, если она будет оставаться на одной вкладке, той, которая была активна в момент создания кнопки

    Перед созданием можно использовать GUISwitch($hWnd, $iTabItemID).

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

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



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

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 23:19 09-02-2009 | Исправлено: Hackproof, 14:30 10-02-2009
    Re0g

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скажите, почему не работает пример скрипта из cправки (AutoIT v3.2.5.4 (beta))?

    Код:
     
    #include <GUIConstants.au3>
     
    GUICreate("My GUI")  ; will create a dialog box that when displayed is centered
     
    GUICtrlCreateButton ("my picture button", 10,20,40,40, $BS_ICON)
    GUICtrlSetImage (-1, "shell32.dll",22)
                     
    GUISetState ()
     
    ; Run the GUI until the dialog is closed
    While 1
        $msg = GUIGetMsg()
         
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Wend
     


    Всего записей: 113 | Зарегистр. 13-10-2008 | Отправлено: 00:59 10-02-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Re0g 00:59 10-02-2009
    Цитата:
    почему не работает пример скрипта из cправки

    Хм, наверное потому что там прямо так и написано: AutoIT v3.2.5.4
    В последних версиях многое изменилось, читайте родную справку к каждой версии, там и примеры должны быть рабочими .
     
    P.S
    В этом случае нехватает #include <ButtonConstants.au3> в начале скрипта.

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

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

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

    Цитата:
    ViSiToR
    , спасибо.

    Всего записей: 113 | Зарегистр. 13-10-2008 | Отправлено: 13:01 10-02-2009
    zpmaloy

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спс за ответ.. Еще такое! У фтп функции _FtpPutFile первый парамент Фтп опен второй откуда третий куда ... И дальше флаг и еще что то .. Можно ли ему задать чтобы если файл уже есть такой то НЕ заменять его а пропустить ?? Флаг ничего недал и ута неизвестная переменная тоже ... в описании этой функции вот что  
    ; Function Name:    _FTPPutFile()
    ; Description:      Puts an file on an FTP server.
    ; Parameter(s):     $l_FTPSession   - Array from _FTPOpen()
    ;                          $s_LocalFile     - The local file.
    ;                          $s_RemoteFile      - The remote Location for the file.
    ;                          $l_Flags        - Special flags.
    ;                          $l_Context      - I dont got a clue what this does.
    ; Requirement(s):   DllCall, wininet.dll
    ; Return Value(s):  On Success - 1
    ;                   On Failure - 0

    Всего записей: 3 | Зарегистр. 09-02-2009 | Отправлено: 21:55 10-02-2009
    buduc

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    как сравнить 2 .txt файла (содержимое),слова которые нет во первым file записать в новый файле .спасибо всем .

    Всего записей: 14 | Зарегистр. 07-02-2009 | Отправлено: 01:55 11-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.Board
    © Ru.Board 2000-2017

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru