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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как распечатать кусок строки? Например есть строка "Привет, мир", надо распечатать с 5 по 7 символы.

    Всего записей: 15 | Зарегистр. 07-08-2007 | Отправлено: 13:09 28-12-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    lll6 13:09 28-12-2008
    Цитата:
    Как распечатать кусок строки?

    На принтер? Можно например поместить этот кусок во временный файл, и печатать его:
     

    Код:
     
    $sLine = "Привет, мир"
    $sPrint_Line = StringMid($sLine, 5, 7)
     
    $sTmp_File = @TempDir & "\~Au3_PrintProc.txt"
     
    $hOpenTmpFile = FileOpen($sTmp_File, 2)
    FileWrite($hOpenTmpFile, $sPrint_Line)
    FileClose($hOpenTmpFile)
     
    RunWait('Rundll32.exe "' & @SystemDir & '\mshtml.dll",PrintHTML "' & $sTmp_File & '"', @SystemDir)
     
    FileDelete($sTmp_File)


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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно ли как-нибудь изобразить запуск приложения с указанием, на каком мониторе ему нужно сидеть?
     
    =========================
    Сам догадался. WinGetPos, WinMove, WinSetState.

    Всего записей: 106 | Зарегистр. 24-05-2008 | Отправлено: 19:27 28-12-2008 | Исправлено: Hackproof, 23:52 28-12-2008
    Dr_Gusenica



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть два вопроса:
    1. Как приостановить скрипт, чтобы он ожидал нажатия определенной клавиши/кнопки мыши;
    2. Как попроще организовать слежение за буфером обмена с заменой недопустимых в имени фала символов (*, /, ? и др.), например, на _(Computer*12*p1-25 на Computer_12_p1-25)  

    Всего записей: 3 | Зарегистр. 28-12-2008 | Отправлено: 23:32 28-12-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Dr_Gusenica 23:32 28-12-2008
    Цитата:
    Как приостановить скрипт, чтобы он ожидал нажатия определенной клавиши/кнопки мыши

     
    Смотря при каких условиях, пример:
     

    Код:
    Global $iPaused = True
     
    HotKeySet("^+p", "_PauseToggle")
    HotKeySet("{ESC}", "_Quit")
     
    _PauseToggle()
     
    $iDemo_Count = 0
     
    While 1
        Sleep(1000)
     
        $iDemo_Count += 1
        ConsoleWrite(", " & $iDemo_Count)
    WEnd
     
    Func
    _PauseToggle()
        $iPaused = Not $iPaused
     
        If $iPaused Then
            ConsoleWrite(", Ждёмс... ")
        Else
            ConsoleWrite("Поехали... ")
        EndIf
     
        While
    $iPaused
            Sleep(10)
        WEnd
    EndFunc
     
    Func
    _Quit()
        Exit
    EndFunc

     

    Цитата:
    Как попроще организовать слежение за буфером обмена с заменой недопустимых в имени фала символов

    В самом буфере нужно менять? Можно так:
     

    Код:
    HotKeySet("{ESC}", "_Quit")
     
    $sOld_Clip_Data = ClipGet()
     
    While 1
        Sleep(1000)
     
        $sCurrent_Clip_Data = ClipGet()
     
        If $sCurrent_Clip_Data <> $sOld_Clip_Data Then
            $sOld_Clip_Data = $sCurrent_Clip_Data
     
            $sCurrent_Clip_Data
    = _StringReplaceUnsupported($sCurrent_Clip_Data)
     
            If @extended > 0 Then
                If
    ClipPut($sCurrent_Clip_Data) Then $sOld_Clip_Data = $sCurrent_Clip_Data
            EndIf
        EndIf
    WEnd
     
    Func
    _StringReplaceUnsupported($sString, $sPatern='[*?\\/|:<>"]', $sReplace="_")
        If StringStripWS($sString, 8) = "" Then Return $sString
     
        $sString
    = StringRegExpReplace($sString, $sPatern, $sReplace)
        $sString = StringRegExpReplace($sString, '(' & $sReplace & '+)', $sReplace)
     
        Return SetExtended(@extended, $sString)
    EndFunc
     
    Func
    _Quit()
        Exit
    EndFunc


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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    С наступающим ВСЕХ. Ребята есть проблемка с USDownloader. Есть много ссылок с депозита, проблема в том, что USD после примерно первых двух закачек, уходит в ожидание минимум минут на 30.  У меня динамический IP, вот я и подумал можно ли как сделать скриптик который следил бы за временем ожидания в USD и при нахождении примерно более 2 минут делал ресет подключения к интернету и затем посылал в USD нажатие клавиши F5 ??? Как думаете это вообще реально или нет ??? За ранее ОГРОМНОЕ СПАСИБО

    Всего записей: 156 | Зарегистр. 18-07-2008 | Отправлено: 00:53 29-12-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    araneon 00:53 29-12-2008
    Цитата:
    можно ли как сделать скриптик который следил бы за временем ожидания в USD и при нахождении примерно более 2 минут делал ресет подключения к интернету и затем посылал в USD нажатие клавиши F5 ?

    А зачем? USD и сам умеет это делать, в настройках можно выставить время ожидания, так же как и команду при неудачной попытке скачать файлы. Например, можно указать путь к программе перезапуска подключения, это может быть батник с «rasdial /disconnect», или даже AutoIt скрипт с функцией перезапуска подключения (см. в шапке под Отдельные функции (UDF):).

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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    К сожалению для меня задача оказалась непосильной, прошу помощи
     
    Данное решение окажется полезным для всех кто хоть иногда фотографирует в RAWе. Задача следующая:
     
    Фотоаппарат сохраняет два файла: RAW и JPG
    После копирования всех фотографий и последующем просмотре, естественно, возникает желание часть фотографий удалить. В большинстве случаев просматриваются JPGи, они же и удаляются. После них остаются огромные RAWы, которые тоже нужно удалить. Вручную это делать очень не удобно, приходиться смотреть какие JPG остались, вспоминать...
     
    Очень хотел бы иметь скрипт, который сканировал бы текущую папку на RAWы, и искал соответствующий ему по имени JPG. Если JPG не существует - удалять текущий RAW.
     
    Сложна ли задача?
     

    Всего записей: 1378 | Зарегистр. 26-10-2004 | Отправлено: 01:11 29-12-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    CKA3O4H1K 01:11 29-12-2008
    Цитата:
    хотел бы иметь скрипт, который сканировал бы текущую папку на RAWы, и искал соответствующий ему по имени JPG. Если JPG не существует - удалять текущий RAW.

    Если только в текущей папке (без рекурсии), тогда можно сделать так:
     

    Код:
    Global $iDeleted = 0, $sDeleted_FilesList = ""
    Global $hSearch = FileFindFirstFile(@ScriptDir & "\*.raw")
     
    If $hSearch = -1 Then
        MsgBox(48, "Ошибка", "Не найднеы *.raw файлы в текущем каталоге.")
        Exit
    EndIf
     
    While
    1
        $sNextFile = FileFindNextFile($hSearch)
        If @error Then ExitLoop
     
        If
    StringRight($sNextFile, 3) <> "raw" Then ContinueLoop
     
        $sJpgFileName = StringRegExpReplace($sNextFile, "\.[^\.]*$", ".jpg")
     
        If Not FileExists(@ScriptDir & "\" & $sJpgFileName) And FileDelete(@ScriptDir & "\" & $sNextFile) Then
            $iDeleted += 1
            $sDeleted_FilesList &= @ScriptDir & "\" & $sNextFile & @CRLF
        EndIf
    WEnd
     
    If
    $iDeleted > 0 Then
        MsgBox(64, "Результат", StringFormat("Список файлов которые были удалены [%i]:\n\n%s", $iDeleted, $sDeleted_FilesList))
    Else
        MsgBox(64, "Результат", "Ни один файл небыл удалён.")
    EndIf


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 01:40 29-12-2008 | Исправлено: ViSiToR, 01:42 29-12-2008
    Dr_Gusenica



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR, огромное спасибо за скрипты (отдельно - за оперативность).  
    Скрипт, меняющий символы в буфере - в  самую точку.  
    На счет приостановки скрипта поясню задачу. Скрипт не нужно останавливать нажатием клавиши, он должен сам остановиться и ждать, пока ее нажмут.
    Идеальный вариант - выполнение цикла, в котором "истина" - нажатие клавиши - завершала бы цикл (когда - то давно делал такое в Basic, точно помню, только как- забыл).  
    Работа скрипта невозможна пока пользователь не поместит курсор мыши в какое-то место на экране (каждый раз разное, не имеет привязки к Title, Class и др.) и не будут получены значения координат положения курсра мыши.
    Просто поставить Sleep для того чтобы успели передвинуть курсор - плохой вариант - у каждого разная реакция, кто-то не успеет, кто-то будет зря ждать.
    Поэтому задумка такая: выводится  
    MsgBox(0, "Внимание!","Установите курсор в левый верхний угол области обработки и нажмите 'ПРОБЕЛ'")
    Начинает выполняться цикл, пльзователь перемещает курсор и прерывает цикл  нажатием SPACE (может быть любая другая).
    Затем при помоши MouseGetPos() значения фиксируются.
    Еще лучше, если прерывать цикл бдет нажатие кнопки мыши.
    P.S. Прошу прощения если запутал объясненими. Скорее всего задачу можно решить более современными инструментами.
     
     
     
     

    Всего записей: 3 | Зарегистр. 28-12-2008 | Отправлено: 01:58 29-12-2008
    CKA3O4H1K



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    отлично! огромное спасибо CreatoR за твой труд!

     
    Добавлено:
    Прошу прощения, я забыл указать что RAWы бывают двух расширений: PEF и DNG
    Скрипт отредактировал, заменив RAW на PEF, но добавить еще одно обрабатываемое расширение не смог (одновременно или PEF или DNG)
     
    Как сформулировать правильно строку?
    Global $hSearch = FileFindFirstFile(@ScriptDir & "\*.pef" & "\*.dng")
    и  
    If StringRight($sNextFile, 3) <> "pef" or "dng" Then ContinueLoop
     
    Спасибо!
     
    Добавлено:
    и сложно ли добавить рекурсивность на вложенные папки?

    Всего записей: 1378 | Зарегистр. 26-10-2004 | Отправлено: 02:22 29-12-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Dr_Gusenica 01:58 29-12-2008
    Цитата:
    Начинает выполняться цикл, пльзователь перемещает курсор и прерывает цикл  нажатием SPACE

    При MsgBox никакой цикл работать не будет. Нужно либо ToolTip, либо вообще ничего (или после сообщения, закрыв его). И не понятно, как тогда скрипт будет останавливаться, сам по себе? так не бывает - Нужно определить что скрипт остановлен. Так или иначе, вот пример паузы цикла и ожидание перемещения курсора мышки в нужные координаты:
     

    Код:
    #include <Misc.au3>
     
    Global $iLoopIsStopped = False
    Global
    $hUser32_DllOpen = DllOpen("User32.dll")
     
    Global $iX_Coord = 105
    Global $iY_Coord = 110
     
    HotKeySet("{ESC}", "_Quit")
     
    While 1
        ;Допустим через 2 секунды цикл прервался
        Sleep(2000)
     
        _StopLoop_Proc()
    WEnd
     
    Func
    _StopLoop_Proc()
        While True
            Sleep(100)
     
            If _IsPressed(01, $hUser32_DllOpen) Or _IsPressed(20, $hUser32_DllOpen) Then
                $aMouse_Pos = MouseGetPos()
     
                If $aMouse_Pos[0] = $iX_Coord And $aMouse_Pos[1] = $iY_Coord Then
                    MsgBox(64, "Найдены координаты", "Проверка (X: " & $aMouse_Pos[0] & ", Y: " & $aMouse_Pos[1] & ")")
                    ExitLoop
                EndIf
            EndIf
        WEnd
    EndFunc
     
    Func
    _Quit()
        DllClose($hUser32_DllOpen)
        Exit
    EndFunc

     
    CKA3O4H1K 02:22 29-12-2008
    Цитата:
    Как сформулировать правильно строку?

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

    Цитата:
    сложно ли добавить рекурсивность на вложенные папки?

    Нет, в шапке есть функции для этого. Пример...
     
    Но проверять на JPG'и будет только в той папке, где найден RAW файл, если нужно проверять везде, то придётся делать поиск по массиву (больше времени для обработки).

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 03:37 29-12-2008 | Исправлено: ViSiToR, 03:41 29-12-2008
    Maza Faka



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

    Цитата:
    сложно ли добавить рекурсивность на вложенные папки?

    COM-метод, +рекурсия +возможность указания нескольких расширений файла +скорость

    Код:
    Global $objFSO = ObjCreate("Scripting.FileSystemObject")
     
    _FileEnumEx("c:\PhotoFolder", "PEF|DNG")
     
    Func _FileEnumEx($sPath, $sExt)
        Local $objFolder, $colSubFolder, $objSubFolder, $colFiles, $objFile
     
        $objFolder
    = $objFSO.GetFolder($sPath)
        $colFiles = $objFolder.Files
        $colSubFolder = $objFolder.SubFolders
     
        For $objFile In $colFiles
            If StringRegExp($objFile.Name, '(?i)\.(' & $sExt & ')$') Then
                If Not
    FileExists(StringRegExpReplace($objFile.Path, "(?i)\A(.*\.).*", "\1") & "JPG") Then FileDelete($objFile.Path)
            EndIf
        Next
     
        For
    $objSubFolder In $colSubFolder
            _FileEnumEx($objSubFolder.Path, $sExt)
        Next
    EndFunc
      ;==>_FileEnumEx

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:35 29-12-2008
    araneon



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR Огромное тебе спасибо, как до дома доеду обязательно проверю.
     
    Добавлено:
    ViSiToR Огромное тебе спасибо, как до дома доеду обязательно проверю. А этот скрипт VPN соединение тоже рестарит ?

    Всего записей: 156 | Зарегистр. 18-07-2008 | Отправлено: 09:23 29-12-2008
    Dr_Gusenica



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

    Цитата:
    При MsgBox никакой цикл работать не будет

     
    это понятно, я забыл добавить, что выполнение цикла должо начаться имено после закрытия MsgBox.
     
    И хоть я не совсем верно изложил задачу, тем не менее в твоем ответе нашел ответ на вопрос. Все что мне, оказывается, было нужно - это функция _IsPressed, даже приведенный в Help пример удовлетворяет почти всем моим треблваниям.
    Спасибо за помощь, проблема решена!

    Всего записей: 3 | Зарегистр. 28-12-2008 | Отправлено: 13:18 29-12-2008
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka 08:35 29-12-2008
    Цитата:
    COM-метод, +рекурсия +возможность указания нескольких расширений файла +скорость

    Кстати, на оф. форуме делали сравнение, какой метод самый быстрый для получения списка файлов... И как я понял, COM как раз очень медленный при работе с большим количеством файлов - Хотя при сравнении моего примера и твоего (на папке с многими вложенными файлами и папками), твой оказался быстрее (на 2 с лишним секунды ). Но это из за того что мой пример сначала читает в массив список файлов+папок, и только потом обрабатывает их. Вот что у меня получилось при попытке ускорить скрипт, плюс придать удобное использование. Читать скрипт...
     
    Тут кстати не будет проблем с ограничением рекурсивного входа в функции
    Добавил последний параметр устанавливающий рекурсию. Если 0 то проверка делается только для указанного каталога.


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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 14:20 29-12-2008 | Исправлено: ViSiToR, 14:35 29-12-2008
    Zwook

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет, давненько я тут не был...
     
    Мне нужно послать несколько клавиш одна за другой без задержки. Следовательно я использовал Opt( "SendKeyDelay", 0 ), я также пробовал Opt( "SendKeyDelay", 1 ). Проблема в том, что это работает не совсем так как мне надо...
     
    В виндовсе, к примеру в блокноте, клавиши вводятся без задержки. В игре (в которой я пытаюсь это симулировать) оно работает, но задержка все равно есть, гдето 50-100 мс.
    Я проверял работает ли сама функция ставя высокие задержки 500-1000 мс, все работает... Если в самой игре последовательно быстро нажать 2 клавиши, задержки не будет, а следовательно проблема не в игре а в скрипте....
     
    Вот код
     
     

    Код:
    Opt( "SendKeyDelay", 0 )
    Opt( "SendKeyDownDelay", 0 )
    Opt( "MouseClickDelay", 0 )
    Opt( "MouseClickDownDelay", 0 )
     
    #include <Misc.au3>
     
    While 1
               ; If _IsPressed("28") Then
    Send("{Space}")
     
    MouseClick("Left")
     
    Send("{LSHIFT}")
     
    MouseClick("Left")
     
    Send("{LSHIFT}")
     
        ;EndIf
    WEnd

     
     
     
    Я пробовал без _IsPressed а также с _IsPressed, в любом случае задержка большая.
     
    Ещё я пробовал
    Код:
    _IsPressed("28",DllOpen("user32.dll"))
    результат тот же...
     
    Из всего выше сказанного, можно сделать вывод - Скрипт работает, но задержка между нажатиями клавиш слишком большая. Кстати говоря, я также пробовал HotkeySet вместо  _IsPressed почему-то оно вообще не работает.
     
     
    Надеюсь получу ответ о_о.

    Всего записей: 83 | Зарегистр. 21-11-2008 | Отправлено: 15:42 29-12-2008 | Исправлено: Zwook, 15:43 29-12-2008
    CKA3O4H1K



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Maza Faka
     
    Приогромнейшее спасибо!  
    Со своей стороны постараюсь поделиться скриптом со всеми с кем смогу, копирайт обязательно укажу. Так просто взяли и облегчили будни фотографов.
     
    AutoIT буду осваивать, тем более в Linux под Wine скомпиленые скрипты отлично работают, а простота и грациозность сабжа  впечатляет, особенно в ваших руках
     
    P.S.: Как следует поступить, что бы научить скрипт брать путь рабочей папки из параметров командной строки? Причём будет вариант когда передаётся путь с файлом и нужно будет отделить только путь к вмещающей папке и работать с ней.
     
    Нужно анализировать переданную строку, или есть готовые решение, как распознать путь к родительской папке?

    Всего записей: 1378 | Зарегистр. 26-10-2004 | Отправлено: 16:42 29-12-2008 | Исправлено: CKA3O4H1K, 19:52 29-12-2008
    Zwook

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нашел игру специально для людей работающих в аутоит
     
    http://www.kongregate.com/games/Coolio_Niato/light-bot
     
    Вот скриншот игры (сам делал) - http://img155.imageshack.us/img155/7103/17279126aq6.jpg
     
    Для тех у кого туго с английским: Цель игры запрограммировать робота, чтобы он прошел по всем синим клеткам и зажег их лампочкой. Очень очень похоже на написание программ в Аутоит, всем советую
     
     
    ###Закончил все уровни, урааа

    Всего записей: 83 | Зарегистр. 21-11-2008 | Отправлено: 19:29 29-12-2008 | Исправлено: Zwook, 19:58 29-12-2008
    CKA3O4H1K



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Оказалось всё намного проще: заменил @ScriptDir на @WorkingDir
    Замечательно понимает текущую папку, хотя передаю в параметрах путь к конкретному изображению.
     
    Кроме того заменил FileDelete на FileRecycle, теперь можно не бояться ошибки.
    Как отточу скрипт - выложу в этом посте под кат.  
    Спасибо большое ребята!
     
    P.S.: Хотя всё же это решение с передаваемым путём не совсем гибкое. Сделав кнопку в ACDSee и TotalCommander все работает, но если передать файл через меню explorer "SendTo" или открывать файл с помощью скрипта, то путь к папке изображения не определяется и не обрабатывается, тоесть скрипт не срабатывает (проверяю на скомпилированом екзешнике)

    Всего записей: 1378 | Зарегистр. 26-10-2004 | Отправлено: 20:07 29-12-2008 | Исправлено: CKA3O4H1K, 20:52 29-12-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