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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не осилил вопрос сам... подсобите, люди добрые, в решении задачи:
    Надо открыть (ассоциированным приложением) в папке несколько pdf файлов, причём имена которых начинаются с определённых символов, т.е., например, по шаблону KME_*.pdf ну и неплохо бы (но это уже совсем не так важно) сигнализировать как-то по окончанию открытия последнего.
    Зарание большое спасибо.

    Всего записей: 1571 | Зарегистр. 05-11-2005 | Отправлено: 22:05 04-11-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    elchupakabra 22:05 04-11-2008
    Цитата:
    Надо открыть (ассоциированным приложением) в папке несколько pdf файлов, причём имена которых начинаются с определённых символов, т.е., например, по шаблону KME_*.pdf

     
    Примерно так:
     

    Код:
     
    $sPath = @MyDocumentsDir
    $sMask = "KME_*.pdf"
     
    $sLast_File = ""
    $hSearch = FileFindFirstFile($sPath & "\" & $sMask)
     
    If $hSearch = -1 Then
        MsgBox(16, "Error", "No files/directories matched the search pattern." & @CRLF & @CRLF & "OK ==> EXIT")
        Exit
    EndIf
     
    While
    1
        $sPdf_File = FileFindNextFile($hSearch)
     
        If @error Then
            MsgBox(262144+64, "Attention", "Last file was open: " & $sLast_File)
            ExitLoop
        EndIf

     
        $sLast_File = $sPdf_File
     
        ShellExecute($sPdf_File, "", $sPath)
    WEnd
     
    FileClose($hSearch)


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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Спасибо, но проблема не в том, что появляется окно с ошибкой, а в том, что после определенного момента скрипт не может запустить приложение под другой учеткой.
    Немного почитал хелп и нашел следующее:

    Цитата:
    If a script using RunAs() happens to be running as the SYSTEM account (for example, if the script is running as a service) and the user's profile is loaded, then you must take care that the script remains running until the child process closes

    Это как раз мой случай. Использование RunAsWait не помогло... может чуть позже, но ошибка снова проявляется.
    Сейчас попробую Interactive logon with profile флаг...

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 02:03 05-11-2008
    timka85

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет! Очень простой вопрос. Нужен скрипт (.exe), включающий всебя два файла: *.reg и главный .exe для конечного запуска программы. Другими словами, должно получиться так, что сначала регистрируется ключ в реестре, а по окончании этого запускается уже зарегистрированная прога.
    Кто знает, помогите, пожалуйста.

    Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 08:09 05-11-2008
    Maza Faka



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

    Код:
     
    FileInstall()
    RegRead()
    RegWrite()
     

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пишу функцию, которая будет рисовать GUI. В зависимости от переданных в нее параметров, некоторые элементы на GUI могут рисоваться, а могут и нет. Как правильно написать цикл While для этого GUI, чтобы в случае если элементы не нарисованы, он не обрабатывал команды Case по этим элементам?
    Пробовал If - не получилось. Вариант рисовать необязательные элементы, а потом прятать не подходит.
     

    Код:
     
    While 1
        Switch GUIGetMsg()
        ; обязательные элементы
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $WLButton1
                $To = GUICtrlRead ($WLInput1)
                $Subject = GUICtrlRead ($WLInput2)
                $WLetterBody = GUICtrlRead ($WLEdit1)
                _SendWarningLetter ($From, $SMTPServer, $Login, $Passwd, $SMTPPort, $To, $Subject, $WLetterBody)
                ExitLoop
        ; конец обязательных элементов
        
        ; необязательные элементы
            Case $WLIcon4 ; иконка аттача
                ShellExecute($AddedAttachName)
            
            Case $WLLabel3 ; label с именем аттача
                ShellExecute($AddedAttachName)
            
            Case $WLButton2 ; кнопка удалить аттач
                $AddedAttachName = ""
                GUICtrlSetData ($WLLabel3, "")
                GUICtrlSetState ($WLIcon4, $GUI_HIDE)
                GUICtrlSetState ($WLLabel3, $GUI_HIDE)
                GUICtrlSetState ($WLButton2, $GUI_DISABLE)
                GUICtrlSetState ($WLButton3, $GUI_ENABLE)
                GUICtrlSetState ($WLIcon4_1, $GUI_SHOW)
                GUICtrlSetState ($WLIcon4_2, $GUI_HIDE)
                GUICtrlSetState ($WLButton1, $GUI_DISABLE)
            
            Case $WLButton3 ; кнопка вставить аттач
                $AddedAttachName = FileOpenDialog ("Выберите прикладываемый файл", @ScriptDir, "Архивы (*.zip; *.rar)", 1+2, $AddedAttachName, $WarningLetterGUI)
                If $AddedAttachName <> "" Then
                    GUICtrlSetData ($WLLabel3, StringRegExpReplace($AddedAttachName, ".*\\", ""))
                    GUICtrlSetState ($WLIcon4, $GUI_SHOW)
                    GUICtrlSetState ($WLLabel3, $GUI_SHOW)
                    GUICtrlSetState ($WLButton2, $GUI_ENABLE)
                    GUICtrlSetState ($WLButton3, $GUI_DISABLE)
                    GUICtrlSetState ($WLIcon4_1, $GUI_HIDE)
                    GUICtrlSetState ($WLIcon4_2, $GUI_SHOW)
                    If BitAND(GUICtrlGetState($WLIcon1_2), $GUI_SHOW) And BitAND(GUICtrlGetState($WLIcon2_2), $GUI_SHOW) And BitAND(GUICtrlGetState($WLIcon3_2), $GUI_SHOW) And BitAND(GUICtrlGetState($WLIcon4_2), $GUI_SHOW) Then GUICtrlSetState ($WLButton1, $GUI_ENABLE)
                EndIf
            ; конец необязательных элементов
                
        EndSwitch
    WEnd
     

     
    Добавлено
    Решил, не стоит беспокоиться

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 12:39 05-11-2008 | Исправлено: Tipulatoid, 14:17 05-11-2008
    timka85

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

    Цитата:
    timka85
    Смотри в справке:
     
    Код:
     
    FileInstall()
    RegRead()
    RegWrite()
     

    а где сам справочник?!

    Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 13:22 05-11-2008
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    timka85
    Ты, надеюсь, пишешь в Scite, что идет вместе с Auto'it - ом? Набери в нем эти 3 команды, поставь курсор клавиатуры  на одну из них и нажми F1

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 13:47 05-11-2008 | Исправлено: Tipulatoid, 13:48 05-11-2008
    frb noname

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    не могу в цикле, когда имена инпутов забиты в массив, выполнить по ним
    guictrlsetdata($array[$i],""), а вот так работает без проблем :
    guictrlsetdata(name1,"")
    guictrlsetdata(name2,"")
     
    как  сделать через цикл ?

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 18:09 05-11-2008 | Исправлено: frb noname, 18:10 05-11-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Tipulatoid 12:39 05-11-2008
    Цитата:
    Решил, не стоит беспокоиться

    Ты бы решение расказал/показал, чтобы при поиске подобного вопроса, могли найти ответ.
     
    timka85 13:22 05-11-2008
    Цитата:
    а где сам справочник?!

    В шапке.
     
    frb noname 18:09 05-11-2008
    Цитата:
    не могу в цикле, когда имена инпутов забиты в массив, выполнить по ним

    Мда, я лично долго над этим думал, не мог понять как это понимать  
    Вроде понял... Покажи пример того, как помещаются "имена" (хотя там не имена должны быть, а идентификаторы элементов/инпутов) в массив.

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

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

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    Maza Faka
    Вы меня простите, но я дуб дубом в скриптах. Может найдет кто из вас пару минут нарисовать один для меня? Я слово волшебное знаю - Бевакаша (иврит)

    Всего записей: 236 | Зарегистр. 19-07-2008 | Отправлено: 20:28 05-11-2008
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вобщем, так и не получается у меня решить эту траблю
    Зато вычислил "условия" появления ошибки.  
     
    Первый скрипт (EXE) запускается службой, соответственно, работает под учеткой SYSTEM. Я его выложил на предыдущей странице, его единственная функция - запуск другого скрипта (ЕХЕ) под учетной записью Administrator (он всегда локально залогинен).
    Так вот первый скрипт прекрасно запускает 2-й не более 32 раз! Ровно на 33 попытке он обламывается. И с этого момента уже невозможно запустить 2-й скрипт. Помогает только logoff/logon, но это не выход
    Уже перерыл все настройки безопасности и учетных записей.

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 20:29 05-11-2008
    Tipulatoid



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

    Цитата:
    не могу в цикле, когда имена инпутов забиты в массив, выполнить по ним  


    Код:
    For $p = 0 To UBound ($array) - 1
       guictrlsetdata($array[$p],"")
    Next

    ViSiToR

    Цитата:
    Ты бы решение расказал/показал, чтобы при поиске подобного вопроса, могли найти ответ.  

    Решение обыкновенное - я не подумавши написал, что прятать необязательные элементы мне нельзя. Оказалось - можно. Т.е. в любом случае рисуем все элементы; в случае, если переданный в функцию параметр $IncludeAttaches равен False, то необязательные элементы прячем.
    timka85

    Цитата:
    Может найдет кто из вас пару минут нарисовать один для меня?


    Цитата:
    Нужен скрипт (.exe), включающий всебя два файла: *.reg и главный .exe для конечного запуска программы. Другими словами, должно получиться так, что сначала регистрируется ключ в реестре, а по окончании этого запускается уже зарегистрированная прога.  


    Код:
    FileInstall("program.reg", "program.exe")
    ShellExecute("program.reg")
    WinWaitActive ("Редактор реестра")
    Send("{ENTER}")
    WinWaitActive ("Редактор реестра")
    Send("{ENTER}")
    Run ("program.exe")

    Первая команда FileInstall не тестировалась. Она имеет смысл только если скрипт скомпилирован.
    Добавлено
    А вообще надежнее не запускать reg - файл, а самостоятельно писать его содержимое реестр. Тут RegWrite поможет

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 23:17 05-11-2008 | Исправлено: Tipulatoid, 23:34 05-11-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Tipulatoid 23:17 05-11-2008
    Цитата:
    Решение обыкновенное - я не подумавши написал, что прятать необязательные элементы мне нельзя. Оказалось - можно.

    На всякий случай опишу решение и для случая когда элементы не создаются (но проверяются в Case)...
     
    Для этого можно предварительно объявить переменные которые должны содержать идентификаторы элементов, и присвоить им значение -1, тогда при обработке GUIGetMsg() не будет срабатывать условие, т.к нету события которыое идентифицируется как -1. Примерно так:
     

    Код:
    #include <GuiConstants.au3>
     
    $hGUI = GUICreate("Test Script", 300, 200)
     
    $Child_Button = GUICtrlCreateButton("Button", 20, 40, 60, 20)
     
    GUISetState(@SW_SHOW, $hGUI)
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case
    $Child_Button
                MyGUI($hGUI, "Child", 1) ;2)
        EndSwitch
    WEnd
     
    Func
    MyGUI($hWnd, $sTitle="Title", $iButtonsNum=2)
        Local $nButton1 = -1, $nButton2 = -1
        Local $i_Left = (200/2) - 35 ;Center
     
        GUISetState(@SW_DISABLE, $hWnd)
        Local $hChild_GUI = GUICreate($sTitle, 200, 130, -1, -1, -1, -1, $hWnd)
     
        If $iButtonsNum = 2 Then
            $nButton2 = GUICtrlCreateButton("Cancel", $i_Left + (35 + 10), 100, 70, 20)
            $i_Left -= (35 + 10) ;10 to the left, so the both buttons will be at the center
        EndIf
     
        $nButton1 = GUICtrlCreateButton("OK", $i_Left, 100, 70, 20)
     
        GUISetState(@SW_SHOW, $hChild_GUI)
     
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case
    $nButton1
                    MsgBox(64, "", "Button1 pressed")
                    ExitLoop
                Case
    $nButton2
                    MsgBox(64, "", "Button2 pressed")
            EndSwitch
        WEnd

     
        GUISetState(@SW_ENABLE, $hWnd)
        GUIDelete($hChild_GUI)
    EndFunc


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 00:13 06-11-2008
    timsky



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

    Код:
    runas /noprofile /user:server\administrator "c:\test\Log.exe 123"

    но все равно получаю ошибку:

    Код:
    RUNAS ERROR: Unable to run - c:\test\Log.exe 123
    5: Access is denied.

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 00:28 06-11-2008 | Исправлено: timsky, 00:29 06-11-2008
    Tipulatoid



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

    Цитата:
    Пробовал запустить ручками  


    Цитата:
    но все равно получаю ошибку:  

    Т.е. и в обычной cmd не работает? Если да, попробуй спросить в теме Задачи на bat - файлах Там есть спецы.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 05:06 06-11-2008
    frb noname

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

    Цитата:
    Мда, я лично долго над этим думал, не мог понять как это понимать  
    Вроде понял... Покажи пример того, как помещаются "имена" (хотя там не имена должны быть, а идентификаторы элементов/инпутов) в массив.
     

    Насчет имен и идентификаторов точно. Спасибо. Сделал :

    Код:
     
    $gob[1]=10
    $gob[2]=12
    $gob[3]=14
    $gob[4]=16
    $gob[5]=18
    $gob[6]=20
    $gob[7]=22
    $gob[8]=24
    $gob[9]=26
    $gob[10]=28
    $gob[11]=30
    $gob[12]=32
    $gob[13]=34
    $gob[14]=36
    $gob[15]=38
     
    Func clear_all()
        For $tmp=1 to 15
            guictrlsetdata($gob[$tmp],"")
        Next
    EndFunc
     
     

     
    Работает
     
     
    Добавлено:
    Есть функция, которая по нажатию кнопки, в полях формы (инпутах) отображает данные из базы SQLite, соответствующие значению первой колонки элемена listview (list1) :

    Код:
     
    Func browse_recno()
     
    run_sqlite()
    $tmp = StringLeft(guictrlread(guictrlread($list1)),StringInStr(guictrlread(guictrlread($list1)),"|")-1);=== читаем значение первой колонки - код записи.
    _SQlite_Query (-1, "SELECT fam, name, father FROM baza where kod=" & $tmp & ";", $tmp_rez);=== выборка из базы по условию
     
    While _SQLite_FetchData ($tmp_rez, $aRow) = $SQLITE_OK ;=== отображаем запись в полях формы
        guictrlsetdata($input_fam,$aRow[0])
        guictrlsetdata($input_name,$aRow[1])
        guictrlsetdata($input_father,$aRow[2])            
    WEnd
     
    stop_sqlite()
        
    EndFunc
     

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

    Всего записей: 47 | Зарегистр. 03-11-2008 | Отправлено: 09:32 06-11-2008
    timsky



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    Спасибо, пойду туда.

    Всего записей: 2287 | Зарегистр. 08-06-2004 | Отправлено: 13:48 06-11-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    frb noname 09:32 06-11-2008
    Цитата:
    Как сделать так, чтобы функция срабатывала каждый раз, когда я тыкаю мышкой по списку list1 или хожу курсором

     
    Можно так:
     

    Код:
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
     
    Global $IsListView_Event = False
     
    $hGUI = GUICreate("ListView Get Item Text", 400, 300)
     
    $hListView = GUICtrlCreateListView("Items", 2, 2, 394, 268)
     
    _GUICtrlListView_AddItem($hListView, "Item 1")
    _GUICtrlListView_AddItem($hListView, "Item 2")
    _GUICtrlListView_AddItem($hListView, "Item 3")
     
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
     
    GUISetState()
     
    While GUIGetMsg() <> $GUI_EVENT_CLOSE
        If $IsListView_Event <> False Then
            $sItemData = $IsListView_Event
            $IsListView_Event
    = False
     
            Browse_Recno($sItemData)
        EndIf
    WEnd
     
    Func
    WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
        $hWndListView
    = $hListView
        If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
     
        $tNMHDR = DllStructCreate($tagNMHDR & ";int Item", $ilParam)
     
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        $iItem = DllStructGetData($tNMHDR, "Item")
     
        Switch $hWndFrom
            Case $hWndListView
                Switch $iCode
                    Case $NM_CLICK, $LVN_HOTTRACK
                        $IsListView_Event
    = _GUICtrlListView_GetItemText($hWndListView, $iItem)
                EndSwitch
        EndSwitch
     
        Return
    $GUI_RUNDEFMSG
    EndFunc
     
    Func
    Browse_Recno($sItemData)
        Run_sqlite()
     
        _SQlite_Query(-1, "SELECT fam, name, father FROM baza where kod=" & $sItemData & ";", $tmp_rez);=== выборка из базы по условию
     
        While _SQLite_FetchData ($tmp_rez, $aRow) = $SQLITE_OK ;=== отображаем запись в полях формы
            GUICtrlSetData($input_fam, $aRow[0])
            GUICtrlSetData($input_name, $aRow[1])
            GUICtrlSetData($input_father, $aRow[2])
        WEnd
     
        Stop_sqlite()
    EndFunc


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

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



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Такой вопросик, нужно было модифицироать BIN фал довольно большого размера.
    Читаешь его с помощью
    $f = FileOpen("File", 16)
    $bF1 = FileRead($f)
     
     и потом модифицируешь его с помощью обычных функций работы со строками. Очень медленно.
     
    Пример - сравнение двух BIN файлов:
     

    Код:
    $sFile1 = 'file1.bin'
    $sFile2 = 'file2.bin'
    $sFile3 = 'Result.txt'
    $f = FileOpen($sFile1, 16)
    $bF1 = FileRead($f)
    FileClose($f)
    $f = FileOpen($sFile2, 16)
    $bF2 = FileRead($f)
    FileClose($f)
     
    $iAd = -1
    $iCount = 0
    $sf3 = ''
    For $iAddr = 0 To (StringLen($bF2) - 2) / 2
        If BinaryMid($bF1, $iAddr + 1, 1) <> BinaryMid($bF2, $iAddr + 1, 1) Then
            If $iAd <> $iAddr Then
                $sf3 &= @CRLF & Hex($iAddr, 8) & ':'
                $iCount = 0
                $iAd = $iAddr
            EndIf
            $sf3 &= Hex(BinaryMid($bF2, $iAddr + 1, 1))
            $iAd += 1
            $iCount += 1
            If $iCount = 64 Then
                $iAd = -1
            EndIf
        EndIf
    Next
     
    $f = FileOpen($sFile3, 2)
    FileWrite($f,$sf3)
    FileClose($f)
     
    MsgBox(0, StringLen($bF1), $sf3)  

     
    Как реально можно ускорить работу, можно, конечно, читать файлы побайтно, но это неприменимо - они уже есть в созданных переменных.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:58 06-11-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