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

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



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

    Цитата:
    Всё это есть в шапке  

    Спасибо, но читать вроде не разучился.
     
    Maza Faka
    Спасибо конечно за ответ, но предложенные тобой варианты у меня не работают нормально. По поводу
    Цитата:
    Попробуй так:


    Код:
    #include <IE.au3>
     
    $oIE = _IECreate("192.168.1.1/rebootinfo.cgi", 0, 0)
    _IEQuit($oIE

     
    пробовал, тут браузер вызывается и закрывается. В большинстве случаев, если в системе по умолчанию установлен не IE, возникает ошибка. А мне нужно не использовать браузер вообще, а например передать эту строку с помощью вызова функции(й) какой нибудь стандартной виндовой dll, т.е без использования любого браузера.
     
    А указанный мной выше код проверки подключения у меня работает нормально. Поскольку у меня подключение к инету по Wi-Fi, то добавив в этот код ещё пару строк и подправив подпрограмму,  я могу проверить, на каком участке пропал интернет или просто отключен в настройках Сетевые подключения. Вот примерное начало:

    Код:
    $state=-1
    $state1=Ping("www.google.com", 1000) ;  Интернет
    $state2=Ping("xxx.xxx.xxx.xxx", 550) ; где xxx.xxx.xxx.xxx - IP адрес Провайдера
    $state3=Ping("192.168.1.1", 100) ; IP адрес маршрутизатора

     
    И проблема здесь только в том, что почему-то работает подпрограмма только с но только с wininet.dll  версии 6.00.2900.2180 и не могу понять почему??? Да, функция InternetGetConnectedState в разных версиях wininet.dll находится по разным адресам, но вызов функции идет вроде как по имени, и адресация по идее не должна влиять или не так?
     
    Добавлено:
    В некоторых случаях (при медленном соединении) нужно увеличивать значение timeout команды Ping!
     

    Всего записей: 113 | Зарегистр. 16-03-2007 | Отправлено: 15:59 04-01-2009 | Исправлено: wasmkv, 16:15 04-01-2009
    diamondxxx



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Уважаемые пользователи форума помогите пожалуйста разобраться.
     
    Повод: При разворачивании образа "ОС+дрова" с помощью Acronis true image with UR на новое железо при старте системы получаю много окон с предложением установить драйвер такой-то, несмотря на то что стоит галка "пропускать дрова, не запрашивать утверждения"
     
    Что хочу: Надо жать кнопки в окнах установки\обновления драйверов - ""Далее", "Да", "Готово" автоматом. Так как клава у меня беспроводная USB не работает до установки всех предшествующих драйверов.
     
    Что сделал: почитал справку autoit, сделал следующие задания  
    Проблема: По отдельности задания работают, но мне надо чтобы они отрабатывали по след схеме:
    Выполняем задание 1, если есть окно, щелкаем Далее. Если нет окна, тогда переходим к заданию 2, если нет окна задания 2, переходим в заданию 3 и т.д.
    Переход между заданиями должен идти по кругу допустим 20 раз или как вариант пока не появится окно, требующее перезагрузки для завершения установки драйвера.
    p.s. я не программер абсолютно, не пинайте сильно
     
    ; задание 1. Жмем Далее
    If WinExists("Мастер обновления оборудования", "&Далее") Then
    WinActivate ("Мастер обновления оборудования", "&Далее")
    WinWaitActive("Мастер обновления оборудования", "&Далее")
    Sleep(1000)
    Send("{ENTER}")
     
    ; задание 2 Жмем Готово
     If WinExists("Мастер обновления оборудования", "&Готово") Then
        WinActivate ("Мастер обновления оборудования", "&Готово")
        WinWaitActive("Мастер обновления оборудования", "&Готово")
    Sleep(1000)
    Send("{ENTER}")
     
    ; задание 3 Жмем Да
     If WinExists("Предупреждение при обновлении драйвера", "&Да") Then
        WinActivate ("Предупреждение при обновлении драйвера", "&Да")
        WinWaitActive("Предупреждение при обновлении драйвера", "&Да")
    Sleep(1000)
    Send("{LEFT}{ENTER}")
     

    Всего записей: 42 | Зарегистр. 14-09-2006 | Отправлено: 18:52 05-01-2009
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    diamondxxx
    А ты в цикл это все заключи:
     
    While 1
    Здесь твой код
    Wend
     
    Типа такого:
     

    Код:
    While 1
        ; задание 1. Жмем Далее
        If WinExists("Мастер обновления оборудования", "&Далее") Then
            WinActivate ("Мастер обновления оборудования", "&Далее")
            WinWaitActive("Мастер обновления оборудования", "&Далее")
            Send("{ENTER}")
        EndIf
     
        ; задание 2 Жмем Готово
         If WinExists("Мастер обновления оборудования", "&Готово") Then
            WinActivate ("Мастер обновления оборудования", "&Готово")
            WinWaitActive("Мастер обновления оборудования", "&Готово")
            Send("{ENTER}")
        EndIf
     
        ; задание 3 Жмем Да
         If WinExists("Предупреждение при обновлении драйвера", "&Да") Then
            WinActivate ("Предупреждение при обновлении драйвера", "&Да")
            WinWaitActive("Предупреждение при обновлении драйвера", "&Да")
            Send("{LEFT}{ENTER}")
        EndIf
     
        Sleep(500)
    Wend

     
    Сам не тестил, только убрал Sleep и закрыл условия If Then. Сам скрипт и отрубишь, когда все дрова натянуца и мышь с клавой оживут.

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 19:40 05-01-2009 | Исправлено: timsky, 19:43 05-01-2009
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как исключить дисковод из  

    Код:
    $tblDrives = DriveGetDrive("REMOVABLE")

    ?

    Всего записей: 3267 | Зарегистр. 30-05-2007 | Отправлено: 22:52 05-01-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Zloy_Gelud 22:52 05-01-2009
    Цитата:
    Как исключить дисковод из

    Он уже вроде оттуда исключён (за счёт "REMOVABLE")... или это USB-привод?

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

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



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

    Цитата:
    Он уже вроде оттуда исключён (за счёт "REMOVABLE")

    Вот и я так думал..у меня А: - обыкновенный дисковод, не знаю чего он вдруг появляется при использовании "REMOVABLE"
    Выкрутился так:

    Код:
    #include <GUIListBox.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
     
    Opt('MustDeclareVars', 1)
     
    _GUI()
     
    Func
    _GUI()
       
    Local $hGUI, $tblDrives, $hListBox
        $hGUI
    = GUICreate("(UDF Created) ListBox Create", 400, 296)
       
    $hListBox =
    _GUICtrlListBox_Create($hGUI, "String upon creation", 2, 2, 396, 296)
       
    GUISetState()
       
    ; Добавляем removable-устройства
       
    _GUICtrlListBox_BeginUpdate($hListBox)
       
    _GUICtrlListBox_ResetContent($hListBox)
       
    _GUICtrlListBox_InitStorage($hListBox, 100, 4096)
       
    $tblDrives = DriveGetDrive("REMOVABLE")
       
    If NOT @error Then
            For
    $i = 1 to $tblDrives[0]
               
    If ($tblDrives[$i] <> "a:") then
    ; исключаем дисковод
                     
                   
    _GUICtrlListBox_AddString($hListBox,"[ " & StringLeft($tblDrives[$i],1) & " ] - " & DriveGetLabel($tblDrives[$i]))
               
    endif
            Next
        EndIf
       
    _GUICtrlListBox_EndUpdate($hListBox)
     
       
    Do
        Until
    GUIGetMsg() = $GUI_EVENT_CLOSE
    EndFunc

     
    Добавлено:
    И еще вопросик. Как в вышеприведенный код добавить следующее: если выбран какой-нить пункт в Листбоксе, то появлялось сообщение, содержащее букву устройства, отображаемую в этом пункте?

    Всего записей: 3267 | Зарегистр. 30-05-2007 | Отправлено: 23:29 05-01-2009
    Maza Faka



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

    Цитата:
    Как исключить дисковод из  
    Код:$tblDrives = DriveGetDrive("REMOVABLE")

     
    ViSiToR

    Цитата:
    Он уже вроде оттуда исключён

    C каких это пор Floppy-дисковод не является съёмным устройством?
     
    Zloy_Gelud

    Цитата:
    если выбран какой-нить пункт в Листбоксе, то появлялось сообщение, содержащее букву устройства

    Пример:

    Код:
    #include <GUIListBox.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
     
    Opt('MustDeclareVars', 1)
     
    Global $hListBox
     
    _GUI()
     
    Func _GUI()
        Local $hGUI, $tblDrives
     
        $hGUI
    = GUICreate("(UDF Created) ListBox Create", 400, 296)
     
        $hListBox = _GUICtrlListBox_Create($hGUI, "String upon creation", 2, 2, 396, 296)
     
        GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
     
        GUISetState()
     
        ; Добавляем removable-устройства
        _GUICtrlListBox_BeginUpdate($hListBox)
        _GUICtrlListBox_ResetContent($hListBox)
        _GUICtrlListBox_InitStorage($hListBox, 100, 4096)
     
        $tblDrives = DriveGetDrive("REMOVABLE")
        If Not @error Then
            For
    $i = 1 To $tblDrives[0]
                If ($tblDrives[$i] <> "a:") Then ; исключаем дисковод
                    _GUICtrlListBox_AddString($hListBox, "[ " & StringLeft($tblDrives[$i], 1) & " ] - " & DriveGetLabel($tblDrives[$i]))
                EndIf
            Next
        EndIf

     
        _GUICtrlListBox_EndUpdate($hListBox)
     
        Do
        Until
    GUIGetMsg() = $GUI_EVENT_CLOSE
    EndFunc   ;==>_GUI
     
    Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
        Local $iCode = BitShift($wParam, 16) ;Hi Word
     
        Switch $lParam
            Case $hListBox
                Switch $iCode
                    Case $LBN_SELCHANGE
                        Local $iIndex = _GUICtrlListBox_GetCurSel($hListBox)
                        If $iIndex <> -1 Then ConsoleWrite(_GUICtrlListBox_GetText($hListBox, $iIndex) & @LF)
                    EndSwitch
            EndSwitch
     
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_COMMAND

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:27 06-01-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka 11:27 06-01-2009
    Цитата:
    C каких это пор Floppy-дисковод не является съёмным устройством?

    Я так понял речь не о Floppy, а об...
     
    23:29 05-01-2009
    Цитата:
    А: - обыкновенный дисковод

     

     
    И вообще, слово "дисковод" подразумивает устройство для обработки дисков, не дискет Имхо.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 13:14 06-01-2009
    Maza Faka



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

    Цитата:
    Я так понял речь не о Floppy, а об...

    C незапамятных времён буквы A: и B: были зарезервированны для дисководов гибких дисков.
     

    Цитата:
    И вообще, слово "дисковод" подразумивает устройство для обработки дисков, не дискет

    Мда... а как же тогда называется устройство для считывания информации с гибких дисков?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:11 06-01-2009
    Zloy_Gelud



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

    Цитата:
    C незапамятных времён буквы A: и B: были зарезервированны для дисководов гибких дисков.
       
    Maza Faka -- за пример спасибо! Буду дальше сам хелп курить.
     

    Всего записей: 3267 | Зарегистр. 30-05-2007 | Отправлено: 18:44 06-01-2009
    Leagnus

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Интересно, существует ли скролабл гуй? Или можно ли в ListView поместить контролы? Чтобы при рисайзе появлялись скролбары там, где стало тесно? Я видел это не в АвтоИтовских гуях – объект звался TScrollBox, но на нём были контролы, а не текст или поля/колонки данных.
    Мдя, просмотрел в справке на _GUIScrollBars_Init...

    Всего записей: 148 | Зарегистр. 12-09-2008 | Отправлено: 19:40 06-01-2009 | Исправлено: Leagnus, 21:07 06-01-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka 15:11 06-01-2009
    Цитата:
    C незапамятных времён буквы A: и B: были зарезервированны для дисководов гибких дисков

    Я это знаю
     

    Цитата:
     как же тогда называется устройство для считывания информации с гибких дисков?

    Так и называется, Floppy Диск , но не в этом суть, если я хочу чтобы меня поняли (все), буду так и писать: «Дисковод гибких дисков», или просто «Floppy», а кодга пишут дисковод без уточнения, то самое логичное предположение что это всё же дисковод обычных дисков (те которые по 700/800 MB, 4.5 GB и т.д. ).

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 23:08 06-01-2009
    Zloy_Gelud



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

    Цитата:
    а кодга пишут дисковод без уточнения [..]

    Будем исправляться бо было понятно меня (всем)
    А пока появился еще вопрос (уж извините, не могу пока сам с обработчиком нажатий разобраться..): В этоткусок кода помогите дописать такой обработчик: Если нажали на кнопку и выбран какой-нить индекс в объекте ListView, то появлялось бы сообщение с выбранным индексом, если же ничего не выбрано, то сообщение с какой-нить руганью. И как установить авто-выравнивание ширины ВСЕХ колонок в зависимости от текста в них.

    Всего записей: 3267 | Зарегистр. 30-05-2007 | Отправлено: 01:47 07-01-2009
    theHelg

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите,  
    Пишу скрипт, который в графическом приложении кликает по кнопкам.
    Эмулирую маус-клик через MouseClick("left")  
    При этом иногда клик проходит, а иногда не срабатывает.
    Заметил тенденцию, что если делать быстрое перемещение MouseMove со скоростью 1 - то не всегда срабатывает, но проблема, что даже при низкой скорости перемещения - иногда кликает "вхолостую".
    Специально возле нужного места делаю небольшой зигзаг мышкой - чуть помогло, но не всегда...
     
    Из-за чего это может быть и как с этим можно бороться?
    Не всегда можно отследить, что клик был произведен...

    Всего записей: 13 | Зарегистр. 12-11-2008 | Отправлено: 01:51 07-01-2009
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Появился еще вопрос. Посмотрел как авторы загнали либу SQLite.dll в SQLite.dll.au3 и хотелось бы спросить..можно ли подобно внедрить (не знаю как выразиться лучше ) другую длл в .AU3 файл, а потом соот-но использовать функции этой длл в своем скрипте (предварительно подключив этот .AU3).

    Всего записей: 3267 | Зарегистр. 30-05-2007 | Отправлено: 01:53 07-01-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Zloy_Gelud 01:47 07-01-2009
    Цитата:
    Если нажали на кнопку и выбран какой-нить индекс в объекте ListView, то появлялось бы сообщение с выбранным индексом, если же ничего не выбрано, то сообщение с какой-нить руганью. И как установить авто-выравнивание ширины ВСЕХ колонок в зависимости от текста в них.

     

    Код:
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <WindowsConstants.au3>
     
    Opt('MustDeclareVars', 1)
     
    Global $hListView, $hButton, $hGUI
     
    CreateGUI()
     
    Func CreateGUI()
        Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
        Local $iExListViewStyle = BitOR($LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES)
     
        $hGUI = GUICreate("Безопасное извлечение устройства", 470, 250)
     
        $hListView = GUICtrlCreateListView("Имя|Тип|Полный объем|Свободно|Файловая система", 10, 10, 450, 180, -1, $iExWindowStyle)
        _GUICtrlListView_SetExtendedListViewStyle($hListView, $iExListViewStyle)
        $hButton = GUICtrlCreateButton("Остановить", 10, 200)
     
        GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
     
        GUISetState()
     
        Local $hImage = _GUIImageList_Create(16, 16, 5, 3)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -8)
        _GUICtrlListView_SetImageList($hListView, $hImage, 1)
     
        Local $tblDrives = DriveGetDrive("REMOVABLE") ; таблица съемных устройств
     
        If Not @error Then
            Local
    $iItemsAdded_Count = 0
     
            For $i = 1 To $tblDrives[0]
                If ($tblDrives[$i] <> "a:") Then ; исключаем флоппик
                    $iItemsAdded_Count += 1
     
                    Local $strLabel = DriveGetLabel($tblDrives[$i])
                    If ($strLabel == "") Then ; если метка отсутствует
                        $strLabel = "Съемный диск"
                    EndIf
                    Local $nSpaceTotal = DriveSpaceTotal($tblDrives[$i])
                    Local $nSpaceFree = DriveSpaceFree($tblDrives[$i])
                    Local $strFS = DriveGetFileSystem($tblDrives[$i])
                    Local $nItem = _GUICtrlListView_AddItem($hListView, "(" & StringUpper($tblDrives[$i]) & ") " & $strLabel, 0)
                    _GUICtrlListView_SetItemParam($hListView, $nItem, $tblDrives[$i])
                    _GUICtrlListView_AddSubItem($hListView, $nItem, "Съемный диск", 1)
                    _GUICtrlListView_AddSubItem($hListView, $nItem, String_GetFormattedSize($nSpaceTotal * 1024 ^ 2), 2)
                    _GUICtrlListView_AddSubItem($hListView, $nItem, String_GetFormattedSize($nSpaceFree * 1024 ^ 2), 3)
                    _GUICtrlListView_AddSubItem($hListView, $nItem, $strFS, 4)
                EndIf
            Next
     
            If $iItemsAdded_Count > 0 Then
                For $i = 0 To _GUICtrlListView_GetColumnCount($hListView)-1
                    _GUICtrlListView_SetColumnWidth($hListView, $i, -1)
                Next
            Else
                _GUICtrlListView_SetColumnWidth($hListView, -1, $LVSCW_AUTOSIZE_USEHEADER)
            EndIf
        EndIf
     
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case $hButton
                    Local $sSel_Index = _GUICtrlListView_GetSelectedIndices($hListView, 0)
                    Local $iSel_Index = Number($sSel_Index)
                    Local $sSel_Drive = _GUICtrlListView_GetItemText($hListView, $iSel_Index, 0)
     
                    If $sSel_Index = "" Then
                        MsgBox(48, "Внимание!", "Выберите устройство из списка.", 0, $hGUI)
                    Else
                        MsgBox(64, "Внимание!", "Выбранное устройство: " & $sSel_Drive, 0, $hGUI)
                    EndIf
            EndSwitch
        WEnd
     
        GUIDelete()
    EndFunc   ;==>CreateGUI
     
    Func String_GetFormattedSize($nBytes, $cFormat = "FMTSIZE_AUTOMATIC")
        Local $strResult = ""
        If ($cFormat == "FMTSIZE_AUTOMATIC") Then
            If ($nBytes > 1024) Then
                If ($nBytes / 1024 < 1024) Then
                    $strResult = String(Round($nBytes / 1024, 2)) & " КБ"
                Else
                    If ($nBytes / 1024 ^ 2 < 1024) Then
                        $strResult = String(Round($nBytes / 1024 ^ 2, 2)) & " МБ"
                    Else
                        If ($nBytes / 1024 ^ 3 < 1024) Then
                            $strResult = String(Round($nBytes / 1024 ^ 3, 2)) & " ГБ"
                        Else
                            $strResult = String(Round($nBytes / 1024 ^ 4, 2)) & " ТБ"
                        EndIf
                    EndIf
                EndIf
            Else
                $strResult = String($nBytes)
            EndIf
        ElseIf ($cFormat == "FMTSIZE_BYTES") Then
            $strResult = String($nBytes)
        ElseIf ($cFormat == "FMTSIZE_KB") Then
            $strResult = String(Round($nBytes / 1024, 2)) & " КБ"
        ElseIf ($cFormat == "FMTSIZE_MB") Then
            $strResult = String(Round($nBytes / 1024 ^ 2, 2)) & " МБ"
        ElseIf ($cFormat == "FMTSIZE_GB") Then
            $strResult = String(Round($nBytes / 1024 ^ 3, 2)) & " ГБ"
        ElseIf ($cFormat == "FMTSIZE_TB") Then
            $strResult = String(Round($nBytes / 1024 ^ 4, 2)) & " ТБ"
        EndIf
        Return StringReplace($strResult, ".", ",")
    EndFunc   ;==>String_GetFormattedSize
     
    Func WM_COMMAND($hWnd, $nMsg, $lParam, $wParam)
     
    EndFunc

     
    Неплохой скрипт кстати.
     
    P.S
    А как извлечение будет делаться, просто интересно?
    И ещё, функцию String_GetFormattedSize() можно укоротить в этом случае:
     

    Код:
    Func _String_GetDisplaySize($iByteSize, $iRound=2)
        Local $asBytes[9] = [8, ' KB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB'] ;Last two unreachable
        Local $iBytes_Val = 2 ^ 10
     
        If $iByteSize < $iBytes_Val Then Return $iByteSize & ' Bytes'
     
        For $i = 8 To 1 Step -1
            If $iByteSize >= $iBytes_Val ^ $i Then Return Round($iByteSize / $iBytes_Val ^ $i, $iRound) & $asBytes[$i]
        Next
    EndFunc

     
    Но в общем случае она сама по себе не плохая, сам написал?

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

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



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

    Цитата:
    Неплохой скрипт кстати.

    Спасибо! Очень приятно слышать от Вас.

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

    Есть длл ~ 10 кб. Из нее будет вызываться функа. Это тесно связано с вопросом (на который хотелось бы услышать ответ) :

    Цитата:
    Появился еще вопрос. Посмотрел как авторы загнали либу SQLite.dll в SQLite.dll.au3 и хотелось бы спросить..можно ли подобно внедрить (не знаю как выразиться лучше  ) другую длл в .AU3 файл, а потом соот-но использовать функции этой длл в своем скрипте (предварительно подключив этот .AU3).


    Цитата:
    И ещё, функцию String_GetFormattedSize() можно укоротить в этом случае:

    Для меня это слишком сложно пока для восприятия... ;) Оказалось ничего сложного..Немного времени, и я так смогу писать..

    Цитата:
    Но в общем случае она сама по себе не плохая, сам написал?

    Да сам. Этой ночью наваял. А AutoIt изучаю всего 3 ночь..благо что есть довольно большой срок написания скриптов на другом языке..поетому быстро начинаю разбираться с синтаксисом на AutoIt'e.
     
    Добавлено:
    ViSiToR -- и спасибо за помощь! Отлично робит. Буду дальше думать..

    Всего записей: 3267 | Зарегистр. 30-05-2007 | Отправлено: 02:47 07-01-2009 | Исправлено: Zloy_Gelud, 03:02 07-01-2009
    Maza Faka



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

    Цитата:
    Есть длл ~ 10 кб. Из нее будет вызываться функа

    Извлечение можно реализовать WinAPI-функциями не используя сторонних DLL.
    Инфа по теме:
    USBMon (Мой маленький проект)
    Safely Eject a USB Drive

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 11:39 07-01-2009
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Zloy_Gelud 01:53 07-01-2009
    Цитата:
     Посмотрел как авторы загнали либу SQLite.dll в SQLite.dll.au3 и хотелось бы спросить..можно ли подобно внедрить (не знаю как выразиться лучше    ) другую длл в .AU3 файл, а потом соот-но использовать функции этой длл в своем скрипте (предварительно подключив этот .AU3).

    Я бы не стал этого делать, там каждый раз эта dll'ка пишется в файл (если не найдена предыдущая запись), и только потом происходит обычный DLL-вызов. Для UDF с поставкой аутоита это нужно чтобы не искать файл Dll'ки, а нам можно просто использовать FileInstall (если компиллировать).
    Во всяком случае, если я не ошибаюсь, там просто конвертировали тело dll'ки в hex, загнали это в несколько склеенных строк, и при необходимости записывают обратно в файл (sqlite3.dll), но уже как бинарный код (Binary($sData)).

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 15:54 07-01-2009
    Zloy_Gelud



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

    Цитата:
    Извлечение можно реализовать WinAPI-функциями не используя сторонних DLL.

    Согласен. Но что-то я 'очкую' такие функции юзать..Тем более не ясно как они отработают на других машинах (если вообще будут что-нить извлекать). А в твоем срипте кста фейк остается от извлеченного устройства в "Мой компьютер".
    И спасибо за инфу! Очень пригодилась мне, как начинающему..


    ViSiToR
    Тоже спасиб за инфу по вопросу. Но я все-таки запихал .DLL в .AU3


    Если кому-нить интересно, то ниже первая рабочая версия моего первого проекта на AutoIt'e



    Вопрос. Хотел сам написать функу, проверяющую повторный запуск копии проекта. Но столкнулся с проблемой..как получить дескриптор  (или PID) проекта еще до создания GUI. И какой функой можно закрыть проект (тоже до создания GUI) имея дескриптор, ну или PID, ну или вообще объясните как закрыть самого себя?

    Всего записей: 3267 | Зарегистр. 30-05-2007 | Отправлено: 13:34 08-01-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

    Компьютерный форум 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