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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обновил скрипт list_var_funk.au3 - поиск переменных и функций, добавил возможность передавать путь в ком-строке, а значит использовать по горячей клавише в Scite, Notepad++. Добавил подсчёт переменных и кнопку "Open" для Include
     
    для Scite
     
    для Notepad++

    Всего записей: 4416 | Зарегистр. 03-05-2006 | Отправлено: 09:24 15-06-2010 | Исправлено: AZJIO, 21:08 13-04-2011
    Kar1son

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

    Цитата:
    mb (MsgBox(64, 'Title', |))

    а что это? mb в справке не нашел, а на | ругается как не допустимый символ...

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:43 15-06-2010
    afanasy_spb_ru

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день, уважаемые!
    Написал в AutoIt утилиту-текстовый обработчик и откомпилировал её под DOS консоль. Хотелось бы добавить небольшой текст-описание, который бы был виден при старте утилиты в DOS консоли...
    Подскажите, пожалуйста, как писать строки в DOS консоль...
     
    (Изиняюсь, если тема уже поднималась... Утилита будет использоваться также на ПК под Linux, так что решения для записи строк в консоль Windows не катят...)

    Всего записей: 3 | Зарегистр. 28-05-2010 | Отправлено: 13:18 15-06-2010
    Cegpuk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son, Просто MsgBox(64, 'Title', |), вместо | интересующее значение. Я так понял.

    Всего записей: 287 | Зарегистр. 24-01-2007 | Отправлено: 13:49 15-06-2010
    vicbox777



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son 08:43 15-06-2010
    Цитата:
    а что это? mb в справке не нашел, а на | ругается как не допустимый символ...

    Это аббревиатуры для SciTE. Вот здесь есть описание для русской сборки SciTE. Вобщем смысл в том, что вводиш, например, mb, нажимаеш пробел и из mb получается уже то, что было написано ранее - Msgbox(64,"Title",|), например. Курсор будет стоять в месте символа - |, что удобно. Аббревиатур может быть много, и каждая может иметь свой фрагмент нужного кода, который таким образом очень быстро можно вставить в нужное место SciTE. Вобщем, кто раз попробовал пользоваться - будет пользоваться всю жизнь.

    Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 17:07 15-06-2010 | Исправлено: vicbox777, 17:18 15-06-2010
    kosjachok



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

    Цитата:
    Вот здесь есть описание для русской сборки SciTE.  

    Неплохо было бы добавить это в шапку... Странно что ещё нету ...

    Всего записей: 690 | Зарегистр. 18-08-2004 | Отправлено: 00:25 16-06-2010
    AZJIO



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

    Всего записей: 4416 | Зарегистр. 03-05-2006 | Отправлено: 04:36 16-06-2010 | Исправлено: AZJIO, 09:23 16-06-2010
    Kar1son

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

    Тложно объяснить словами, поэтому скриншот. Ищу красный цвет поочереди на всем поле(на скрине виден один квадрат, на самом деле их тут 6 на 6, просто на одном отрабатываю пока), поиск идет по каждому квадратику, на скрине поиск по квадрату ПОД тем на котором есть совпадение. Маленькая кнопочка показывает где проверка нашла совпадение по цвету, но видно же что его там нет! кусок проги которая это делает виден на скрине. если проверяемый квадрат начинается ниже предыдущего на 17 точек то все норм, если меньше то будет совпадение, причем в разных точках(если ниже на 1 пиксель то в одной, если на 2 пикселя то в другой).  Чертовщина какая-то...
    хотябы в каком направлении копать?  

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 15:25 16-06-2010 | Исправлено: Kar1son, 16:41 16-06-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Скачал Вашу картинку, поместил ее в окно, посмотрел цвет AutoIt v3 Window Info.
    У меня так все работает:
    Код:
    #include <GUIConstantsEx.au3>
     
    Opt("MouseCoordMode", 2)
    Opt("PixelCoordMode", 2)
     
    $Form1 = GUICreate("Form1", 650, 450, -1, -1)
    $Pic1 = GUICtrlCreatePic("1.jpg", 80, 104, 60, 60)
    $Button = GUICtrlCreateButton("Button", 500, 400,80, 30)
    GUISetState()
     
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $Button
                $cord = PixelSearch( 0, 0, 650, 450, 0xF70B17, -1, 0, $Form1)
                If Not @error Then
                    MouseMove($cord[0], $cord[1], 20)
                Else
                    MsgBox(0, '', "Нет такого цвета")
                EndIf
        EndSwitch
    WEnd

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 22:07 16-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    оно и у меня так работает, но после того как находит точку(как в вашем примере), находит еще одну(левую)... вот как оно работает, если не сложно, посмотрте пожалуйста. Спасибо!
    _http://ifolder.ru/18197786

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:16 17-06-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Я поменял в Вашем скрипте (_http://ifolder.ru/18197786) Opt("PixelCoordMode", 0) на Opt("PixelCoordMode", 2) и кнопки создаются только там, где найден цвет, а лишние кнопки у меня не создаются.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 10:14 17-06-2010 | Исправлено: madmasles, 10:20 17-06-2010
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    я кажется понял.я промахнулся с координатами квадратов, и плюс к этому PixelSearch давал координаты от угла окна, а GUICtrlCreateButton координаты от клиентского окна... Спасибо что помогли разобраться!

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 10:35 17-06-2010
    degid



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    XpycTMD
    Цитата:
    degid
    Цитата:
    Ура!!! Оказывается существует файл Array.au3! там есть _ArrayCreate.

    Попробуй заменить
    Код:
    #include <Array.au3>
    $strIPAddress = _ArrayCreate("192.168.0.141")
     

    вот на это
    Код:
    Dim $strIPAddress[1] = ["192.168.0.141"]

     

    Спасибо! Работает

    Всего записей: 31 | Зарегистр. 26-10-2006 | Отправлено: 15:28 17-06-2010
    Orion_76



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

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 00:12 20-06-2010
    AZJIO



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

    Цитата:
    Func _cacls()
        $accfncombo0 = GUICtrlRead($accfncombo)
        $access00 = GUICtrlRead($access)
        Switch $access00
            Case $access00 = "запрет"
                $access0 = "N"
            Case $access00 = "чтение"
                $access0 = "R"
            Case $access00 = "запись"
                $access0 = "W"
            Case $access00 = "изменение"
                $access0 = "C"
            Case $access00 = "полный"
                $access0 = "F"
            Case Else
                $access0 = "F"
        EndSwitch
        ShellExecute(@SystemDir & '\cacls.exe', '"' & $sTarget & '" /t /e /p "' & $accfncombo0 & '":' & $access0, '', '', @SW_HIDE)
    EndFunc   ;==>_cacls

     
    $sTarget - путь
    $accfncombo0 - пользователь (Administrator, Все)
    $access0 - буква, к примеру F - полный доступ.
     
    Или посмотри полный пример для контекстного меню

    Всего записей: 4416 | Зарегистр. 03-05-2006 | Отправлено: 01:03 20-06-2010 | Исправлено: AZJIO, 01:11 20-06-2010
    Orion_76



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Наверное я не корректно поставил вопрос...-))
    В скрипте , перед операцией с файлом (копирование, перемещение, запись, чтение), хотелось бы проверить права текущего пользователя на эти операции.
    Что-бы потом не удивляться, почему операция не удалась..-)))
    Надо просто функцию, которая возвратила бы TRUE, если опрерация с файлом доступна пользователю, от имени которого выполняется скрипт.
     
     
     
     

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 01:16 20-06-2010 | Исправлено: Orion_76, 02:10 20-06-2010
    KiLL



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Может кому-то будет интересен один из кирпичиков полной автоматизации развертывания системы из образа. Знаюи что тема давно раскрыта, однако методы/способы/требования у меня свои, следовательно и инструменты тоже. Решения этого вопроса не нашел, поэтому набросал сам. В процессе написания использовал DeviceAPI.au3. Проверено на двух системах.
     

    Цитата:
    #include "DeviceAPI.au3"
     
    ;Смысл программы в том, чтобы закрывая окна Мастера Нового Оборудования,
    ; она считала количество таких закрытых окон и сравнивала это кол-во
    ; с текущим количеством неизвестных устройств, а когда кол-во последних
    ; будет равно количеству закрытых окон (система установит все что может
    ; установить), мы запустим установку неизвестных устройств.
    ;
    ;Можно конечно из окна Мастера нового оборудования из WindowText брать
    ; наименование конкретного неизвестного устройства, затем находить его в
    ; текущем массиве и выбивать из "обоймы", но это уже лишнее, хотя и точнее.
     
    $wcount = 0
     
    ;Перебирая окна, закрываем паразитные и ведем статистику
    Do
        $var = WinList()
        For $i = 1 to $var[0][0]
            If $var[$i][0] <> "" AND BitAnd( WinGetState($var[$i][1]), 2 ) Then
                Select
                    Case $var[$i][0] = "Изменение параметров системы"
                        WinClose("Изменение параметров системы")
                    Case $var[$i][0] = "Мастер нового оборудования"
                        WinClose("Мастер нового оборудования")
                        $wcount+=1
                EndSelect
            EndIf
        Next
    Until $wcount=GetCurrentUnknownDevicesCount()
     
    ;Если все сходится, то завершаем работу
    MsgBox(64,"","Неизвестных устройств: " & $wcount)
     
    ;=======================================================================
    ; Функция подсчета неизвестных устройств в данный момент
    ;=======================================================================
    Func GetCurrentUnknownDevicesCount()
     
        $i=0
     
        ;Строим список классов устройств
        _DeviceAPI_GetAllDevices()
     
        ;Просматривая устройства, считаем количество устройств с пустымы класом и идентификатором
        While _DeviceAPI_EnumDevices()
            $classname = _DeviceAPI_GetClassName(_DeviceAPI_GetDeviceRegistryProperty($SPDRP_CLASSGUID))
            $classGUID = _DeviceAPI_GetDeviceRegistryProperty($SPDRP_CLASSGUID)
            If $classname="" AND $classGUID="" Then $i+=1
        WEnd
     
        ;Очищаем за собой
        _DeviceAPI_DestroyDeviceInfoList()
     
        Return $i
     
    EndFunc

    Всего записей: 255 | Зарегистр. 04-05-2003 | Отправлено: 02:30 20-06-2010 | Исправлено: KiLL, 02:37 20-06-2010
    Orion_76



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот вроде нашел что надо,
    ТОлько не пойму, что она возвращает..
     

    Код:
    Func _GetFileSecurityDACL($sFile)
       
    If Not IsDeclared("DACL_SECURITY_INFORMATION") Then
    Const $DACL_SECURITY_INFORMATION  = 0x4
       
    Local $return
       
    Local $hAdvapi32 =
    DllOpen("advapi32.dll")
       
    If Not FileExists($sFile) Then Return SetError(1,0,0)
       
    $return =
    DllCall($hAdvapi32,"long","GetFileSecurity", _
                       
    "str",$sFile, _
                       
    "dword", $DACL_SECURITY_INFORMATION, _
                       
    "ptr",0, _  
                       
    "dword",0, _
                       
    "dword*",0)
       
    If Not $return[5] Then Return SetError(1,0,0)
       
    Local $strucSD =
    DllStructCreate("byte[" & $return[5] & "]")
       
    $return =
    DllCall($hAdvapi32,"long","GetFileSecurity", _
                       
    "str",$sFile, _
                       
    "dword", $DACL_SECURITY_INFORMATION, _
                       
    "ptr",
    DllStructGetPtr($strucSD), _  
                       
    "dword",
    DllStructGetSize($strucSD), _
                       
    "dword*",0)
       
    If Not $return[0] Then Return SetError(1,0,0)
       
    DllClose($hAdvapi32)
       
    Return
    DllStructGetData($strucSD,1)
    EndFunc
     ?  Код создан и опубликован с помощью SciTE-Ru[/more][no][/no]

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 14:05 20-06-2010
    Kar1son

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

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 09:04 21-06-2010
    Orion_76



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

    Код:
     
    Func _cacls()
        $accfncombo0 = GUICtrlRead($accfncombo)
        $access00 = GUICtrlRead($access)
        Switch $access00
            Case $access00 = "запрет"
                $access0 = "N"
            Case $access00 = "чтение"
                $access0 = "R"
            Case $access00 = "запись"
                $access0 = "W"
            Case $access00 = "изменение"
                $access0 = "C"
            Case $access00 = "полный"
                $access0 = "F"
            Case Else
                $access0 = "F"
        EndSwitch
        ShellExecute(@SystemDir & '\cacls.exe', '"' & $sTarget & '" /t /e /p "' & $accfncombo0 & '":' & $access0, '', '', @SW_HIDE)
    EndFunc   ;==>_cacls
     

     

    Цитата:
    Надо просто функцию, которая возвратила бы TRUE, если опрерация с файлом доступна пользователю, от имени которого выполняется скрипт.  

     
    И где она возвращает?

    Всего записей: 386 | Зарегистр. 02-11-2007 | Отправлено: 11:33 21-06-2010
       

    Страницы: 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