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

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



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 15:00 24-07-2008
    Цитата:
    как установить черный (иль зеленый)  
     цвет шрифта в  за`DISABLE`нном Inout`е   ??

    Увы никак, вместо дисейбла можно использовать атрибут (стиль) только для чтения ($ES_READONLY).
     
    asdfzxcv 17:42 24-07-2008
    Цитата:
    есть случайно готовое решение (скрипт) для получения списка процессов с путями к файлам от куда они запущены

    В шапке есть нечто похожее, и вот UDF который я приводил на оф. форуме (пожалуй и он не помешает в шапке)...
     

    Код:
    #include <Array.au3>
     
    ;============= Example with default usage =============
    $aProcListEx = _ProcessListEx()
     
    If @error Then
        MsgBox(48, "_ProcessListEx - Error", StringFormat("There was an error to get ProcessList (@error = %i)", @error))
    Else
        _ArrayDisplay($aProcListEx, "_ProcessListEx Demo (All Processes)")
    EndIf
    ;============= Example with default usage =============
     
    ;============= Example with Resource Name usage =============

    $aAutoItProcList = _ProcessListEx("CompiledScript", "AutoIt", 0)
     
    If @error Then
        MsgBox(48, "_ProcessListEx - Error", StringFormat("There was an error to get ProcessList (@error = %i)", @error))
    Else
        _ArrayDisplay($aAutoItProcList, "_ProcessListEx Demo (AutoIt Processes)")
    EndIf
    ;============= Example with Resource Name usage =============
     
    ;===============================================================================
    ;
    ; Function Name:           _ProcessListEx()
    ;
    ; Function Description:    Gets Process List with extended info, plus can retrieve only a processes with specific resources strings.
    ;
    ; Parameter(s):            $sResourceName [Optional] - Resource name of the process filename, i.e. "CompiledScript".
    ;                          $sInResString [Optional] - String to check in the resource name.
    ;                          $iWholeWord [Optional] - Defines if the $sInResString will be compared as whole string (default is 1).
    ;
    ; Requirement(s):          None.
    ;
    ; Return Value(s):         On Success -  Return 2-dimentional array, where:
    ;                                                                   $aRet_List[0][0] = Total processes (array elements).
    ;                                                                   $aRet_List[N][0] = Process Name.
    ;                                                                   $aRet_List[N][1] = PID (Process ID).
    ;                                                                   $aRet_List[N][2] = Process File Path.
    ;                          On Failure -  Return '' (empty string) and set @error to:
    ;                                                                   1 - Unable to Open Kernel32.dll.
    ;                                                                   2 - Unable to Open Psapi.dll.
    ;                                                                   3 - No Processes Found.
    ;
    ; Author(s):               G.Sandler (a.k.a MrCreatoR) - CreatoR's Lab (http://creator-lab.ucoz.ru)
    ;
    ;=====================================================================

    Func _ProcessListEx($sResourceName="", $sInResString="", $iWholeWord=1)
        Local $aProcList = ProcessList()
        Local $hKernel32_Dll = DllOpen('Kernel32.dll'), $hPsapi_Dll = DllOpen('Psapi.dll')
        Local $aOpenProc, $aProcPath, $sFileVersion, $aRet_List[1][1]
     
        If $hKernel32_Dll = -1 Then Return SetError(1, 0, '')
     
        If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@SystemDir & '\Psapi.dll')
        If $hPsapi_Dll = -1 Then $hPsapi_Dll = DllOpen(@WindowsDir & '\Psapi.dll')
        If $hPsapi_Dll = -1 Then Return SetError(2, 0, '')
     
        Local $vStruct      = DllStructCreate('int[1024]')
        Local $pStructPtr   = DllStructGetPtr($vStruct)
        Local $iStructSize  = DllStructGetSize($vStruct)
     
        For $i = 1 To UBound($aProcList)-1
            $aOpenProc = DllCall($hKernel32_Dll, 'hwnd', 'OpenProcess', _
                'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $aProcList[$i][1])
     
            If Not IsArray($aOpenProc) Or Not $aOpenProc[0] Then ContinueLoop
     
            DllCall($hPsapi_Dll, 'int', 'EnumProcessModules', _
                'hwnd', $aOpenProc[0], _
                'ptr', $pStructPtr, _
                'int', $iStructSize, _
                'int*', 0)
     
            $aProcPath = DllCall($hPsapi_Dll, 'int', 'GetModuleFileNameEx', _
                'hwnd', $aOpenProc[0], _
                'int', DllStructGetData($vStruct, 1), _
                'str', '', _
                'int', 2048)
     
            DllCall($hKernel32_Dll, 'int', 'CloseHandle', 'int', $aOpenProc[0])
     
            If Not IsArray($aProcPath) Or StringLen($aProcPath[3]) = 0 Then ContinueLoop
     
            $sFileVersion = FileGetVersion($aProcPath[3], $sResourceName)
     
            If $sResourceName = "" Or $sFileVersion = $sInResString Or _
                (
    $iWholeWord = 0 And StringInStr($sFileVersion, $sInResString)) Then
     
                $aRet_List[0][0] += 1
                ReDim $aRet_List[$aRet_List[0][0]+1][3]
                $aRet_List[$aRet_List[0][0]][0] = $aProcList[$i][0]     ;Process Name
                $aRet_List[$aRet_List[0][0]][1] = $aProcList[$i][1]     ;PID (Process ID)
                $aRet_List[$aRet_List[0][0]][2] = $aProcPath[3]         ;Process File Path
            EndIf
        Next

     
        DllClose($hKernel32_Dll)
        DllClose($hPsapi_Dll)
     
        If $aRet_List[0][0] < 1 Then Return SetError(3, 0, '')
        Return $aRet_List
    EndFunc


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 03:31 25-07-2008 | Исправлено: ViSiToR, 23:06 25-07-2008
    Hackproof



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

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 04:59 25-07-2008 | Исправлено: Hackproof, 05:01 25-07-2008
    asdfzxcv



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо ViSiToR
     
     
    Скажи а почиму у меня такую ошибку выкидывает я просто скопировал и запустил твой UDF
     
    C:\Documents and Settings\123\??????? ????\AutoIt v3 Script.au3 (69) : ==> "long_ptr", "int_ptr" and "short_ptr" DllCall() types have been deprecated.  Use "long*", "int*" and "short*" instead.:  
    DllCall($hPsapi_Dll, 'int', 'EnumProcessModules', 'hwnd', $aOpenProc[0], 'ptr', $pStructPtr, 'int', $iStructSize, 'int_ptr', 0)  
    ???????????????????????????4‰
    ->10:41:14 AutoIT3.exe ended.rc:1
     
    У меня версия автоита 3, 2, 11, 2
     
    ДА в шапку бы такую вещь не помешало бы (если всё работать будет)

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 10:46 25-07-2008 | Исправлено: asdfzxcv, 10:53 25-07-2008
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    это гениально, ViSiToR, ге-ни-ально-о-о!!
    и даже лучше....невнимательный я...эх, блин ... )
    Спасибо! дело все лучше и лучше _)

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 12:00 25-07-2008
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    asdfzxcv
    Замени в скрипте все данные вида long_ptr на long* и т.д.

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а почиму он такую фигню выдаёт непонятно...
     
    я исправил поставил *
            DllCall($hPsapi_Dll, 'int', 'EnumProcessModules', _
                'hwnd', $aOpenProc[0], _
                'ptr', $pStructPtr, _
                'int', $iStructSize, _
    !!!            'int*ptr', 0)
     
    массив показался  всё нормально, а потом выдал в сообщении ошибку #error=3
     
     
    Скажите мож не под мою версию аутоита?? недумаю что визитор нерабочий пример сделал, пример и сделан что бы он был изночально рабочим. )

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 16:59 25-07-2008 | Исправлено: asdfzxcv, 17:35 25-07-2008
    Loopback



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

    Цитата:
    !!!            'int*ptr', 0)  
    массив показался  всё нормально, а потом выдал в сообщении ошибку #error=3

    Тип должен быть просто 'int*', без ptr и без пробелов между типом и *. Этот синтаксис работает в последней релизной версии и последующих бетах, само собой.
     
    Кстати, респект ViSiToR-у за отличную UDF, я уже давно нашел ей применение.

    Всего записей: 174 | Зарегистр. 08-03-2002 | Отправлено: 21:12 25-07-2008
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите пожалуйста, как создать два и более элементов  Tab
    в одном окне? Ниже код, и в нем, все TabItem от Tab2, создаются
    в Tab1 ..
     

    Код:
    #include <GUIConstantsEx.au3>
        GUICreate("My GUI Tab")
     
        $tab1 = GUICtrlCreateTab(10, 10, 350, 150)
        GUICtrlSetState(-1, $GUI_SHOW)
     
        $tab1_Item1 = GUICtrlCreateTabItem("tab1_Item1")
    ;~     кнопки tab1_Item1
        GUICtrlCreateTabItem("")
     
        $tab1_Item2 = GUICtrlCreateTabItem("tab1_Item2")
    ;~     кнопки tab1_Item2
        GUICtrlCreateTabItem("")
     
        $tab2 = GUICtrlCreateTab(10, 200, 350, 150)
        GUICtrlSetState(-1, $GUI_SHOW)
     
        $tab2_Item1 = GUICtrlCreateTabItem("tab2_Item1")
    ;~     кнопки tab2_Item1
        GUICtrlCreateTabItem("")
     
        $tab2_Item2 = GUICtrlCreateTabItem("tab2_Item2")
    ;~     кнопки tab2_Item2
        GUICtrlCreateTabItem("")
     
        GUISetState()
        While 1
            $msg = GUIGetMsg()
     
            If $msg = $GUI_EVENT_CLOSE Then ExitLoop
        WEnd

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 04:12 26-07-2008 | Исправлено: sproxy, 04:46 26-07-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 04:12 26-07-2008
    Цитата:
     как создать два и более элементов  Tab

    Сюдя по справке в одном окне никак:
     

    Цитата:
    ONLY one Tab control can be created by window.

     
    Но далее сказано:
     

    Цитата:
    But a script can creates several windows having a tab in.

     
    Поэтому люди импровизируют:
     

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <TabConstants.au3>
    #include <ListViewConstants.au3>
     
    Global $hImageList = 0
     
    $Main_GUI = GUICreate("Tab Sample", 400, 300, -1, -1);, BitOr($GUI_SS_DEFAULT_GUI,$WS_CLIPSIBLINGS))
    $OK_Button = GUICtrlCreateButton("OK", 110, 270, 70, 20)
    $Cancel_Button = GUICtrlCreateButton("Cancel", 220, 270, 70, 20)
    GUISetState()
     
    ; Creates the first child window that is implemented into the main GUI
    $Child1 = GUICreate("", 370, 215, 15, 40, BitOR($WS_CHILD, $WS_TABSTOP), -1, $Main_GUI)
     
    $child1_tab = GUICtrlCreateTab(0, 0, 370, 215)
    $child1_tabitem1 = GUICtrlCreateTabItem("Child1Tab1")
    $child1_tabitem2 = GUICtrlCreateTabItem("Child1Tab2")
    $child1_tabitem3 = GUICtrlCreateTabItem("Child1Tab3")
    GUICtrlCreateTabItem("")
     
    GUISetState()
     
    ; Creates the second child window that is implemented into the main GUI
    $child2 = GUICreate("", 370, 215, 15, 40, BitOR($WS_CHILD, $WS_TABSTOP), -1, $Main_GUI)
     
    $child3 = GUICreate("", 210, 220, 158, 0, BitOR($WS_CHILD, $WS_TABSTOP), -1, $child2)
    $ListView = GUICtrlCreateListView("Col1|Col2", 0, 2, 210, 211, _
        BitOR($LVS_NOSORTHEADER, $LVS_SHOWSELALWAYS, $WS_TABSTOP), $WS_EX_CLIENTEDGE)
     
    GUICtrlCreateListViewItem("ItemLong1|ItemLong2", $ListView)
    GUICtrlCreateListViewItem("ItemLong3|ItemLong4", $ListView)
    GUICtrlCreateListViewItem("ItemLong5|ItemLong6", $ListView)
    GUISetState()
     
    GUISwitch($child2)
    $child2_tab = GUICtrlCreateTab(0, 0, 156, 215)
    $child2_tabitem1 = GUICtrlCreateTabItem("Child2Tab1")
    $child2_tabitem2 = GUICtrlCreateTabItem("Child2Tab2")
    GUICtrlCreateTabItem("")
     
    ; Switch back the main GUI and create the tabs
    GUISwitch($Main_GUI)
    $main_tab = GUICtrlCreateTab(10, 10, 380, 250)
    $main_tabitem1 = GUICtrlCreateTabItem("MainTab1")
    $main_tabitem2 = GUICtrlCreateTabItem("MainTab2")
    GUICtrlCreateTabItem("")
    GUICtrlSetState($main_tabitem1, $GUI_SHOW)
     
    Bind_ImageList($main_tab)
     
    While 1
        $msg = GUIGetMsg(1)
        Select
            Case
    $msg[0] = $GUI_EVENT_CLOSE Or $msg[0] = $Cancel_Button
                ExitLoop
     
            Case
    $msg[0] = $main_tab
                $tabidx
    = GUICtrlRead($main_tab)
     
                Select
                    Case
    $tabidx = 0
                        GUISetState(@SW_HIDE, $child2)
                        GUISetState(@SW_SHOW, $Child1)
                    Case $tabidx = 1
                        GUISetState(@SW_HIDE, $Child1)
                        GUISetState(@SW_SHOW, $child2)
                EndSelect
        EndSelect
    WEnd
     
    DllCall("comctl32.dll", "int", "ImageList_Destroy", "hwnd", $hImageList)
     
    Func ImageList_Create()
        $hImageList = DllCall("comctl32.dll", "hwnd", "ImageList_Create", "int", 16, "int", 16, "int", 0x0021, "int", 0, "int", 1)
        $hImageList = $hImageList[0]
        Return $hImageList
    EndFunc   ;==>ImageList_Create
     
    Func Bind_ImageList($nCtrl)
        $hImageList = ImageList_Create()
        GUICtrlSendMsg($nCtrl, $TCM_SETIMAGELIST, 0, $hImageList)
     
        $szIconFile = "shell32.dll"
     
        $tcitem = DllStructCreate("uint;dword;dword;ptr;int;int;int")
        DllStructSetData($tcitem, 1, 0x0002)
        DllStructSetData($tcitem, 6, 0)
        AddImageToTab($nCtrl, 0, $tcitem, $szIconFile, 12)
     
        DllStructSetData($tcitem, 6, 1)
        AddImageToTab($nCtrl, 1, $tcitem, $szIconFile, 21)
     
        $tcitem = 0
    EndFunc   ;==>Bind_ImageList
     
    Func AddImageToTab($nCtrl, $nTabIndex, $nItem, $szIconFile, $nIconID)
        $hIcon = DllStructCreate("int")
        $result = DllCall("shell32.dll", "int", "ExtractIconEx", "str", $szIconFile, "int", $nIconID, "hwnd", 0, "ptr", DllStructGetPtr($hIcon), "int", 1)
        $result = $result[0]
        If $result > 0 Then
            DllCall("comctl32.dll", "int", "ImageList_AddIcon", "hwnd", $hImageList, "hwnd", DllStructGetData($hIcon, 1))
            DllCall("user32.dll", "int", "SendMessage", "hwnd", ControlGetHandle($Main_GUI, "", $nCtrl), "int", $TCM_SETITEM, "int", $nTabIndex, "ptr", DllStructGetPtr($nItem))
            DllCall("user32.dll", "int", "DestroyIcon", "hwnd", $hIcon)
        EndIf
     
        $hIcon = 0
    EndFunc   ;==>AddImageToTab

     


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

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



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    это что-то, про Tab, понял.
    Спасибо!
     
    А вот с иконками не совсем, пока...подскажешь как
    сделать иконки у пунктов меню?
     
    + про таб - в целом наоборот!
    это даже круче - и удобней так организовывать gui!
    значит именно так организовывается во многих
    конатркуторах элементы типа "панель" и т.д.
    Cool! Спасибо большое за помощь!
    Как допишу первый раб. вариант - с меня пиво ))

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 05:51 26-07-2008 | Исправлено: sproxy, 08:14 26-07-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    sproxy 05:51 26-07-2008
    Цитата:
     как  
     сделать иконки у пунктов меню?

    Есть UDF от одного из разработчиков AutoIt'а (Holger): GUI/Tray Menu with icons and colors

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

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



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Мастера-Гуру AutoIt и не только _)
    Подскажите плиз, как возможно организовать локальную базу данных?
    SQLite ведь без сервера SQL не заработает?
    или же заработает? если да то, примерно, как это организовывается.
    Если нет, то может есть какие то другие варианты хранения информации,
    если все только в txt хранить, то может есть какие то методы сжатия текста?
    ---------
    на сколько я понял, AutoIT, используя sqllite библиотеки, отлично
    создает базы, а как их сохранять / хранить?
    ----------
    и как задать очередь передачи фокуса элементам по нажатии Tab?

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 14:08 26-07-2008 | Исправлено: sproxy, 15:58 26-07-2008
    Loopback



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sproxy
    А что ты понимаешь под базой даных?
     
    В первую очередь ведь всё зависит от целей (назначения базы) и объемов информации. Хранить можно в чем угодно - в текcтовых файлах, CSV, XML, SQLite, а можно вообще использовать  MS SQL сервер.  
    Если данных - пара сотен записей, вполне сгодится простой текстовый формат. Если объемы побольше - можно задуматься о SQLite: он не требует никаких дополнительных серверов, весь движок - одна библиотека, вся база - один файл. И в то же время почти полноценная поддержка SQL-запросов, индексация таблиц и прочие прелести.  
    Если уж что-то совсем тяжелое - можно поставить MSDE (бесплатная локальная версия MS SQL) и работать с ней через COM.
     
    Поодробнее почитать о принципах работы SQLite можешь тут: http://sb-news.net/sqlite.php
     

    Цитата:
    и как задать очередь передачи фокуса элементам по нажатии Tab?

    В Autoit порядок перехода определяется порядком создания контролов.

    Всего записей: 174 | Зарегистр. 08-03-2002 | Отправлено: 23:45 26-07-2008 | Исправлено: Loopback, 23:48 26-07-2008
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Loopback
    Спасибо!
    --------
    А с mySQL AutoIT не умеет работать ?

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 11:05 27-07-2008 | Исправлено: sproxy, 11:50 27-07-2008
    asdfzxcv



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

    Цитата:
    !!!            'int*ptr', 0)  
    массив показался  всё нормально, а потом выдал в сообщении ошибку #error=3  
     
    Тип должен быть просто 'int*', без ptr и без пробелов между типом и *. Этот синтаксис работает в последней релизной версии и последующих бетах, само собой.  

     
    ((
    Показывает массив процессов но всё равно выдаёт ошибку @error=3 что ему может не навится а ...?
    Visitor что посоветуешь, ты же на сквозь свой пример про процессы знаешь)

    Всего записей: 57 | Зарегистр. 08-04-2006 | Отправлено: 16:26 27-07-2008 | Исправлено: asdfzxcv, 16:31 27-07-2008
    sproxy



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    не могу додумать следующее:
     
    1) как скрывать окно по клику иконки в трее -
    если окно в данный момент было активно.
    А если было не активно, то сделать активным
    и отобразить.
     
    Проблема в том, что при клике по иконке в трее,
    фокус с окна снимется и оно, в момент клика по иконке в трее
    и далее, НЕ активно...т.е. как проверить состояние активно/не активно
    определенного окна по клику иконки в трее?
     
    2) очень плохо что: Some styles cannot be changed dynamically, check MSDN documentation. $CBS_UPPERCASE combo style is one example.
     
    А мне как раз необходимо динамически менять стиль combo:
    стандартный, заблокированный и вид как у обычного input`а
    (кстати, как то можно задать такой вид  у combo?)
     
    Есть ли решение?
     
    3) в каком режиме обработки GUI
    вы пишите программы: MessageLoop или OnEvent ?
    Есть ли приимущества/недостатки у них друг над другом и вообще в целом?
     
    тест код по #1 и #2:
     

    Код:
    #Include <Constants.au3>
    #include <GuiConstantsEx.au3>
    #include <ComboConstants.au3>
    #include <WindowsConstants.au3>
    #include <TabConstants.au3>
    #include <ListViewConstants.au3>
     
    Global $hImageList = 0
    Global $what_do = ""
    TraySetClick( 8 )
     
    $Main_GUI = GUICreate("Tab Sample", 400, 300, -1, -1);, BitOr($GUI_SS_DEFAULT_GUI,$WS_CLIPSIBLINGS))
    $OK_Button = GUICtrlCreateButton("OK", 110, 270, 70, 20)
    $Cancel_Button = GUICtrlCreateButton("Cancel", 220, 270, 70, 20)
    GUISetState()
     
    ; Creates the first child window that is implemented into the main GUI
    $Child1 = GUICreate("", 370, 215, 15, 40, BitOR($WS_CHILD, $WS_TABSTOP), -1, $Main_GUI)
     
    $child1_tab = GUICtrlCreateTab(0, 0, 370, 215)
    $child1_tabitem1 = GUICtrlCreateTabItem("Child1Tab1")
     
    $combo = GUICtrlCreateCombo( "item1", 10, 30, 150, $CBS_UPPERCASE  )
    GUICtrlSetData( -1,"item2|item3", "item3" )
     
    $bt_normal = GUICtrlCreateButton( "normal", 10, 55, 70, 20 )
    $bt_block = GUICtrlCreateButton( "block", 85, 55, 70, 20 )
    $bt_as_input = GUICtrlCreateButton( "as_input", 160, 55, 70, 20 )
     
    $child1_tabitem2 = GUICtrlCreateTabItem("Child1Tab2")
    $child1_tabitem3 = GUICtrlCreateTabItem("Child1Tab3")
    GUICtrlCreateTabItem("")
     
    GUISetState()
     
    ; Creates the second child window that is implemented into the main GUI
    $child2 = GUICreate("", 370, 215, 15, 40, BitOR($WS_CHILD, $WS_TABSTOP), -1, $Main_GUI)
     
    $child3 = GUICreate("", 210, 220, 158, 0, BitOR($WS_CHILD, $WS_TABSTOP), -1, $child2)
    $ListView = GUICtrlCreateListView("Col1|Col2", 0, 2, 210, 211, _
        BitOR($LVS_NOSORTHEADER, $LVS_SHOWSELALWAYS, $WS_TABSTOP), $WS_EX_CLIENTEDGE)
     
    GUICtrlCreateListViewItem("ItemLong1|ItemLong2", $ListView)
    GUICtrlCreateListViewItem("ItemLong3|ItemLong4", $ListView)
    GUICtrlCreateListViewItem("ItemLong5|ItemLong6", $ListView)
    GUISetState()
     
    GUISwitch($child2)
    $child2_tab = GUICtrlCreateTab(0, 0, 156, 215)
    $child2_tabitem1 = GUICtrlCreateTabItem("Child2Tab1")
    $child2_tabitem2 = GUICtrlCreateTabItem("Child2Tab2")
    GUICtrlCreateTabItem("")
     
    ; Switch back the main GUI and create the tabs
    GUISwitch($Main_GUI)
    $main_tab = GUICtrlCreateTab(10, 10, 380, 250)
    $main_tabitem1 = GUICtrlCreateTabItem("MainTab1")
    $main_tabitem2 = GUICtrlCreateTabItem("MainTab2")
    GUICtrlCreateTabItem("")
    GUICtrlSetState($main_tabitem1, $GUI_SHOW)
     
    Bind_ImageList($main_tab)
     
    While 1
        $msg = GUIGetMsg(1)
        Select
            Case
    $msg[0] = $bt_normal
                GUICtrlSetStyle( $combo, $GUI_SS_DEFAULT_COMBO )
     
            Case $msg[0] = $bt_block
                GUICtrlSetStyle( $combo, $CBS_DROPDOWNLIST )
     
            Case $msg[0] = $bt_as_input
    ;~          GUICtrlSetStyle( $combo, ????? )
     
            Case $msg[0] = $GUI_EVENT_CLOSE Or $msg[0] = $Cancel_Button
                ExitLoop
     
            Case
    $msg[0] = $main_tab
                $tabidx
    = GUICtrlRead($main_tab)
     
                Select
                    Case
    $tabidx = 0
                        GUISetState(@SW_HIDE, $child2)
                        GUISetState(@SW_SHOW, $Child1)
                    Case $tabidx = 1
                        GUISetState(@SW_HIDE, $Child1)
                        GUISetState(@SW_SHOW, $child2)
                EndSelect
        EndSelect
        $msg = TrayGetMsg()
            If $msg = $TRAY_EVENT_PRIMARYDOWN Then win_show_hide_active()
     
        If WinGetState( $Main_GUI ) == 15 Then
            $what_do = "hide"
        ElseIf WinGetState( $Main_GUI ) == 5 Then
            $what_do = "show"
        Else
            $what_do = "active"
        EndIf
     
        ToolTip( "State: " & WinGetState( $Main_GUI ) & " Active: " & WinActive( $Main_GUI ), 0, 60 )
    WEnd
     
    Func win_show_hide_active()
        If $what_do = "hide" Then
            GUISetState( @SW_HIDE, $Main_GUI )
        ElseIf $what_do = "show" Then
            GUISetState( @SW_SHOW, $Main_GUI )
        Else
            GUISetState( @SW_RESTORE, $Main_GUI )
        EndIf
     
    EndFunc
     
    DllCall("comctl32.dll", "int", "ImageList_Destroy", "hwnd", $hImageList)
     
    Func ImageList_Create()
        $hImageList = DllCall("comctl32.dll", "hwnd", "ImageList_Create", "int", 16, "int", 16, "int", 0x0021, "int", 0, "int", 1)
        $hImageList = $hImageList[0]
        Return $hImageList
    EndFunc   ;==>ImageList_Create
     
    Func Bind_ImageList($nCtrl)
        $hImageList = ImageList_Create()
        GUICtrlSendMsg($nCtrl, $TCM_SETIMAGELIST, 0, $hImageList)
     
        $szIconFile = "shell32.dll"
     
        $tcitem = DllStructCreate("uint;dword;dword;ptr;int;int;int")
        DllStructSetData($tcitem, 1, 0x0002)
        DllStructSetData($tcitem, 6, 0)
        AddImageToTab($nCtrl, 0, $tcitem, $szIconFile, 12)
     
        DllStructSetData($tcitem, 6, 1)
        AddImageToTab($nCtrl, 1, $tcitem, $szIconFile, 21)
     
        $tcitem = 0
    EndFunc   ;==>Bind_ImageList
     
    Func AddImageToTab($nCtrl, $nTabIndex, $nItem, $szIconFile, $nIconID)
        $hIcon = DllStructCreate("int")
        $result = DllCall("shell32.dll", "int", "ExtractIconEx", "str", $szIconFile, "int", $nIconID, "hwnd", 0, "ptr", DllStructGetPtr($hIcon), "int", 1)
        $result = $result[0]
        If $result > 0 Then
            DllCall("comctl32.dll", "int", "ImageList_AddIcon", "hwnd", $hImageList, "hwnd", DllStructGetData($hIcon, 1))
            DllCall("user32.dll", "int", "SendMessage", "hwnd", ControlGetHandle($Main_GUI, "", $nCtrl), "int", $TCM_SETITEM, "int", $nTabIndex, "ptr", DllStructGetPtr($nItem))
            DllCall("user32.dll", "int", "DestroyIcon", "hwnd", $hIcon)
        EndIf
     
        $hIcon = 0
    EndFunc   ;==>AddImageToTab

     

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 06:51 28-07-2008
    Maza Faka



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

    Код:
    #include <GuiConstantsEx.au3>
    #include <Constants.au3>
     
    Opt("GuiOnEventMode", 1)
    Opt("TrayMenuMode", 1)
     
    $hGUI = GUICreate("Test", 300, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
     
    GUISetState()
     
    While 1
        $tMsg = TrayGetMsg()
        Switch $tMsg
            Case $TRAY_EVENT_PRIMARYDOWN
                If _GUIGetState() Then
                    GUISetState(@SW_HIDE)
                Else
                    GUISetState(@SW_SHOW)
                EndIf
        EndSwitch
    WEnd
     
    Func
    _GUIGetState()
        Return BitAND(WinGetState($hGUI), 2)
    EndFunc
     
    Func
    _Exit()
        Exit
    EndFunc

     
    3)
    По скорости работы разницы вроде бы нет, хотя на офф. форуме кто-то из гуру высказывал предпочтения в пользу OnEvent. Я обычно использую режим OnEvent.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:30 28-07-2008 | Исправлено: Maza Faka, 08:31 28-07-2008
    sproxy



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

    Цитата:
    3)  
    По скорости работы разницы вроде бы нет, хотя на офф. форуме кто-то из гуру высказывал предпочтения в пользу OnEvent. Я обычно использую режим OnEvent.  

    я то же _))
     

    Цитата:
    #include <GuiConstantsEx.au3>  
    #include <Constants.au3>  
     
    Opt("GuiOnEventMode", 1)  
    Opt("TrayMenuMode", 1)  
     
    $hGUI = GUICreate("Test", 300, 200)  
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")  
     
    GUISetState()  
     
    While 1  
        $tMsg = TrayGetMsg()  
        Switch $tMsg  
            Case $TRAY_EVENT_PRIMARYDOWN  
                If _GUIGetState() Then  
                    GUISetState(@SW_HIDE)  
                Else  
                    GUISetState(@SW_SHOW)  
                EndIf  
        EndSwitch  
    WEnd  
     
    Func _GUIGetState()  
        Return BitAND(WinGetState($hGUI), 2)  
    EndFunc  
     
    Func _Exit()  
        Exit  
    EndFunc

     
    Дело то в том, что если окно НЕ активно, но оно ОТОБРАЖАЕТСЯ,
    то необходимо, что бы окно СТАЛО АКТИВНЫМ, а не HIDE....
    В этом то весь интерес )))

    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 08:37 28-07-2008
    Maza Faka



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

    Цитата:
    Дело то в том, что если окно НЕ активно, но оно ОТОБРАЖАЕТСЯ,  
    то необходимо, что бы окно СТАЛО АКТИВНЫМ, а не HIDE....  
    В этом то весь интерес )))

    Тогда будет работать, только первое условие, поскольку  

    Цитата:
    при клике по иконке в трее, фокус с окна снимется и оно, в момент клика по иконке в трее и далее, НЕ активно


    Код:
    #include <GuiConstantsEx.au3>
    #include <Constants.au3>
     
    Opt("GuiOnEventMode", 1)
    Opt("TrayMenuMode", 1)
     
    Global $LastActive
     
    $hGUI
    = GUICreate("Test", 300, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
     
    GUISetState()
     
    While 1
        $tMsg = TrayGetMsg()
        Switch $tMsg
            Case $TRAY_EVENT_PRIMARYDOWN
                If _GUIGetState() Then
                    GUISetState(@SW_HIDE)
                Else
                    GUISetState(@SW_SHOW)
                    WinActivate($hGUI)
                EndIf
        EndSwitch

        $LastActive = WinGetHandle("")
    WEnd
     
    Func
    _GUIGetState()
        Return WinActive($hGUI)
    EndFunc
     
    Func
    _Exit()
        Exit
    EndFunc

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 09:49 28-07-2008
    sproxy



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

    Цитата:
    #include <GuiConstantsEx.au3>  
    #include <Constants.au3>  
     
    Opt("GuiOnEventMode", 1)  
    Opt("TrayMenuMode", 1)  
     
    Global $LastActive  
     
    $hGUI = GUICreate("Test", 300, 200)  
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")  
     
    GUISetState()  
     
    While 1  
        $tMsg = TrayGetMsg()  
        Switch $tMsg  
            Case $TRAY_EVENT_PRIMARYDOWN  
                If _GUIGetState() Then  
                    GUISetState(@SW_HIDE)  
                Else  
                    GUISetState(@SW_SHOW)  
                    WinActivate($hGUI)  
                EndIf  
        EndSwitch  
        $LastActive = WinGetHandle("")  
    WEnd  
     
    Func _GUIGetState()  
        Return WinActive($hGUI)  
    EndFunc  
     
    Func _Exit()  
        Exit  
    EndFunc


    Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 05:01 29-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