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

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

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

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

   

Widok



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

 
Описание:

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

 
  • Справки
  • Инструменты
  • Ресурсы, посвящённые AutoIt
  • Полезные советы новичкам и не только
  • Готовые решения
  • Скрипт раскраски кода AutoIt для публикации в форумах
     


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

  • Всего записей: 24190 | Зарегистр. 07-04-2002 | Отправлено: 13:07 01-06-2010 | Исправлено: Maz, 12:29 10-01-2020
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cosmogor
    Честно говоря не понял вопроса. Если ты получил координаты в переменную, то что мешает взять их из переменной. Если тебе нужно сохранить координаты в ini чтоб запустить используя эти координаты, то можешь попробовать пример

    Всего записей: 4412 | Зарегистр. 03-05-2006 | Отправлено: 19:25 16-09-2011 | Исправлено: AZJIO, 20:44 29-09-2011
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не подскажите регулярное выражение, чтобы выдернуть Dialog.Message из

    Код:
    result = Dialog.Message("Notice", "Your message here.", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);

    Т.е. нужно выдирать сочетание, состоящее из двух слов, разделенных точкой.

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 17:45 19-09-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    Цитата:
    нужно выдирать сочетание, состоящее из двух слов, разделенных точкой.
    Можно так, но не надежно:
    Код:
    $sString = 'result = Dialog.Message("Notice", "Your message here.", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);'
    $sSearch = StringRegExpReplace($sString, '.*?\W(\w+\.\w+)\W?.*', '$1')
    MsgBox(0, '', $sSearch)

    Если в этих двух словах с точкой только англ. буквы, то, ИМХО, так надежнее:
    Код:
    $sString = 'result = Dialog.Message("Notice", "Your message here.", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);'
    $sSearch = StringRegExpReplace($sString, '(?s).*?(?:[^a-zA-Z])\h?([a-zA-Z]+\.[a-zA-Z]+)(?:[^a-zA-Z])?.*', '$1')
    MsgBox(0, '', $sSearch)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 17:58 19-09-2011 | Исправлено: madmasles, 21:37 19-09-2011
    Zloy_Gelud



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

    Цитата:
    Если в этих двух словах с точкой только англ. буквы

    Ога.
    Спасибо за оба варианта.

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 23:17 19-09-2011
    stepanoxus



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста, как получить доступ к изображению, полученному с помощью _ScreenCapture_Capture(...)? Моя конечная цель - написать функцию, которая находит положение маленькой картинки в большой картинке (с некоторой погрешностью). Для этого необходимы попиксельные сравнения обоих картинок. Но я нашел в справке autoit только функцию PixelGetColor, считывающей цвет с пикселя экрана. А мне хотелось бы иметь доступ к содержимому уже готовой картинки.
    PS. Может быть, можно как-то написать длл (например, на си) для этой функции? Нормальным ли будет общение этой функции с autoit, если передавать этой функции хендлы на бмп-структуры? Или все же можно это сделать средствами autoit?

    Всего записей: 30 | Зарегистр. 27-09-2009 | Отправлено: 00:25 20-09-2011 | Исправлено: stepanoxus, 22:26 21-09-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил утилиту ReName (ещё раз обновил, добавлена вкладка "Генерация")

    Всего записей: 4412 | Зарегистр. 03-05-2006 | Отправлено: 07:46 20-09-2011 | Исправлено: AZJIO, 12:00 21-09-2011
    Cosmogor



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO, чего-то у меня пример ругается на OnAutoItExitRegister
    сейчас заменил на AdlibEnable, стало нормально(без ругани)

    Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 21:20 20-09-2011 | Исправлено: Cosmogor, 21:24 20-09-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cosmogor
    Цитата:
    у меня пример ругается на OnAutoItExitRegister
    Вы бы обновили AutoIt, а то много на что ругаться может.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 21:34 20-09-2011
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    есть switch в котором 5 case
    в одном из case есть условие if при выполнении которогонужно из этого case(и всего switch) выйти  
    как это сделать?
    заранее спасибо!

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 17:38 21-09-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Оно само выходит. Внтутри switch срабатывает только один элемент, если сработал то выйдя из if выходит и из switch. Вобщем под указанным case нужно правильно построить конструкцию, просто выпрыгнуть как это делается из цикла не получится.

    Всего записей: 4412 | Зарегистр. 03-05-2006 | Отправлено: 18:00 21-09-2011 | Исправлено: AZJIO, 18:10 21-09-2011
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    swich ....
           case ....
                   if .... then 'exit'
                   [какойто код]
    endswitch
     
     
     
    я правильно понимаю что такое не реализовать?

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:20 22-09-2011 | Исправлено: Kar1son, 09:21 22-09-2011
    madmasles

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

    Код:
    $iReturn = 0
    $iRandom = Random(5, 20, 1)
     
    Switch $iRandom
        Case 5 To 7
            ConsoleWrite('5 To 7' & @LF)
            $iReturn = 1
        Case 8 To 10
            ConsoleWrite('8 To 10' & @LF)
            $iReturn = 2
        Case 11 To 13
            ConsoleWrite('11 To 13' & @LF)
            $iReturn = 3
        Case 14 To 16
            ConsoleWrite('14 To 16' & @LF)
            $iReturn = 4
        Case 17 To 20
            ConsoleWrite('17 To 20' & @LF)
            If $iRandom = 19 Then
                MsgBox(16, 'Error', 'iRandom = ' & $iRandom & @LF & 'Выход')
                Exit
            Else
                $iReturn = 5
            EndIf
    EndSwitch
    MsgBox(64, 'Info', 'iRandom = ' & $iRandom & @LF & 'iReturn = ' & $iReturn)

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 09:37 22-09-2011
    AZJIO



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

    Код:
    swich ....
        Case ....
            If .... Then
                'exit'
            Else
                [какойто код]
            EndIf
    EndSwitch

    Всего записей: 4412 | Зарегистр. 03-05-2006 | Отправлено: 09:50 22-09-2011
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    AZJIO
    понятно. спасибо.
    просто у меня этого  [какойто код] на 4 экрана и так не хотелось делать...

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 11:10 22-09-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Ну у всех так, лично мне тоже бы хотелось упростить эту задачу но не получается, к примеру 4 параметра в условии преобразуют ветвление 16 вариантов и приходится городить все эти 16 вариантов в виде вложенностей одно в другое, повторяя один и тот же код в виде дерева вложенности. Одно дело количество вариантов, другое дело вложенность. Посмотри в ReName строку 1168, в нём Switch, далее под Case ещё Switch, далее цикл с условием. И это нормально, иначе делать Switch внутри функции и выход по Return, но если внутри цикла то вызов функции - лишний холостой ход и нужно будет с переменными определятся (глобальные или локальные).

    Всего записей: 4412 | Зарегистр. 03-05-2006 | Отправлено: 11:31 22-09-2011 | Исправлено: AZJIO, 11:33 22-09-2011
    Cosmogor



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем
    Не могу сделать так, что-бы окно не меняло свой размер.
    Поверх всех окон сделал Gui, а размер окна никак не выходит.
    Какие только стили окна не пробовал.
     

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
     
    Opt("GUIResizeMode", 544)
    Global $aPos[4] = [ -1, -1, 300, 130], $X, $Y, $Form
     
    $X = _WinAPI_GetSystemMetrics($SM_CXDLGFRAME) * 2
    $Y = _WinAPI_GetSystemMetrics($SM_CYDLGFRAME) * 2
     
    _Create_GUI($aPos, $Form)
     
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    $aPos = WinGetPos($Form)
    ; MsgBox(262144, "", $aPos[0] & '   ' &  $aPos[1])
    _Create_GUI($aPos, $Form)
    EndSwitch
    WEnd
     
    Func _Create_GUI($a_Win, ByRef $Form)
    If $Form Then GUIDelete($Form)
    $Form = GUICreate('', $a_Win[2] - $X, $a_Win[3] - $Y, $a_Win[0], _
    $a_Win[1], BitOR($WS_SIZEBOX, $WS_SYSMENU), $WS_EX_TOPMOST)
    GUISetState()
    EndFunc
     
    ; BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST)
    ; BitOR($WS_SIZEBOX, $WS_SYSMENU)


    Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 16:24 23-09-2011
    AZJIO



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

    Цитата:
    Не могу сделать так, что-бы окно не меняло свой размер.
    Убрать стиль $WS_SIZEBOX

    Всего записей: 4412 | Зарегистр. 03-05-2006 | Отправлено: 02:58 24-09-2011 | Исправлено: AZJIO, 03:00 24-09-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cosmogor
    Цитата:
    Не могу сделать так, что-бы окно не меняло свой размер.
    Так?
    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
     
    Global $aPos, $hForm
     
    _Create_GUI($aPos, $hForm)
     
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                $aPos = WinGetPos($hForm)
                _Create_GUI($aPos, $hForm)
        EndSwitch
    WEnd
     
    Func _Create_GUI($a_Win, ByRef $h_Win)
        Local $iW = 300, $iH = 130
        If $h_Win Then GUIDelete($h_Win)
        If Not IsArray($a_Win) Then
            Dim $a_Win[2] = [-1, -1]
        EndIf
        If $a_Win[0] < -10000 Then
            $a_Win[0] = -1
            $a_Win[1] = -1
        EndIf
        $h_Win = GUICreate('', $iW, $iH, $a_Win[0], $a_Win[1], -1, $WS_EX_TOPMOST)
        GUISetState()
    EndFunc   ;==>_Create_GUI

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 06:38 24-09-2011 | Исправлено: madmasles, 07:46 24-09-2011
    Cosmogor



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles, ну вот , то что нужно, сейчас размер не меняется Спс.
     
    madmasles, да откуда переменная $hForm только взялась?  
    Вот,  $aPos понятно зачем, это WinGetPos($hForm)
    Ну а $hForm, ведь надо $h_Win  
    $h_Win = GUICreate('', $iW, $iH, $a_Win[0], $a_Win[1], -1, $WS_EX_TOPMOST)
    Значит надо так : $aPos = WinGetPos($h_Win)
    А написано так: $aPos = WinGetPos($hForm)
     
    Плин вообще не пойму, переменная $hForm ничего не означает.
    И в Global написано: Global $aPos, $hForm  
    Логично думать, что так должно быть: Global $aPos, $h_Win  
     
    Хотя и с $hForm работает, и без неё.
    Может она для чего то нужна всё таки.

    Всего записей: 230 | Зарегистр. 22-04-2009 | Отправлено: 18:39 24-09-2011 | Исправлено: Cosmogor, 23:23 24-09-2011
    madmasles

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

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 00:20 25-09-2011 | Исправлено: madmasles, 09:28 25-09-2011
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 3)
    gyra (23-01-2020 10:51): AutoIT (Часть 4)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru