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

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



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Zloy_Gelud
    Вот так выключается, но назад не возвращается, только по трем клавишам + Esc:

    Код:
     
    #NoTrayIcon
     
    Global Const $lciWM_SYSCommand = 274  
    Global Const $lciSC_MonitorPower = 61808  
    Global Const $lciPower_Off = 2  
    Global Const $lciPower_On = -1  
    Global $MonitorIsOff = False  
     Global $Swith = False  
     HotKeySet("+!^{PAUSE}", "_Monitor_SWITH")  
    HotKeySet("+!^{Esc}", "_Quit")  
    MsgBox(64, "Monitor On/Off", "Press Ctrl+Alt+Shift+Pause to turn off/on the monitor." & @LF & _  
                                                           "Press Ctrl+Alt+Shift+Esc to turn on the monitor and exit program.")  
                                                   
    While 1  
        Sleep(10)  
    WEnd  
     
     Func _Monitor_SWITH()  
      If   $Swith  Then  
       _Monitor_ON()  
        $Swith=False  
       Else    
       _Monitor_OFF()  
        $Swith=True  
        EndIf  
    EndFunc  
    Func _Monitor_ON()  
        $MonitorIsOff = False  
        Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')  
           
        DllCall('user32.dll', 'int', 'SendMessage', _  
                                                    'hwnd', $Progman_hwnd, _  
                                                    'int', $lciWM_SYSCommand, _  
                                                    'int', $lciSC_MonitorPower, _  
                                                    'int', $lciPower_On)  
    EndFunc  
    Func _Monitor_OFF()  
        $MonitorIsOff = True  
        Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')  
        While $MonitorIsOff = True  
            DllCall('user32.dll', 'int', 'SendMessage', _  
                                                        'hwnd', $Progman_hwnd, _  
                                                        'int', $lciWM_SYSCommand, _  
                                                        'int', $lciSC_MonitorPower, _  
                                                        'int', $lciPower_Off)
    _IdleWaitCommit(0)
            Sleep(20)
        WEnd
    EndFunc
     
    Func _IdleWaitCommit($idlesec)
        Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword")
        DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo))
        DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
        Do
            $iSave = DllStructGetData ($LastInputInfo, 2)
            Sleep(60)
            DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
        Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec Or $MonitorIsOff = False
        Return DllStructGetData ($LastInputInfo, 2)-$iSave
    EndFunc
     
    Func _Quit()
        _Monitor_ON()
        Exit
    EndFunc
     


    ----------
    Per warez ad scientiam

    Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 17:05 09-06-2013
    Zloy_Gelud



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

    Код:
    #NoTrayIcon
     
    Global $MonitorIsOff = False
     
    HotKeySet("+!^{PAUSE}", "_Monitor_Switch")
    ;HotKeySet("+!^{PRINTSCREEN}", "_Monitor_ON")
    HotKeySet("+!^{Esc}", "_Quit")
     
    MsgBox(64, "Monitor On/Off", "Press Ctrl+Alt+Shift+Pause to turn off the monitor." & @LF & _
            "Press Ctrl+Alt+Shift+PrnScrn to turn on the monitor back." & @LF & _
            "Press Ctrl+Alt+Shift+Esc to turn on the monitor and exit program.")
     
    While 1
        Sleep(10)
    WEnd
     
    Func _Monitor_ON()
        $MonitorIsOff = False
        Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')
        DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $Progman_hwnd, 'int', 274, 'int', 61808, 'int', -1)
    EndFunc   ;==>_Monitor_ON
     
    Func _Monitor_OFF()
        $MonitorIsOff = True
        Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')
        While $MonitorIsOff = True
            DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $Progman_hwnd, 'int', 274, 'int', 61808, 'int', 2)
            _IdleWaitCommit(0)
            Sleep(20)
        WEnd
    EndFunc   ;==>_Monitor_OFF
     
    Func _IdleWaitCommit($idlesec)
        Local $iSave, $LastInputInfo = DllStructCreate("uint;dword")
        DllStructSetData($LastInputInfo, 1, DllStructGetSize($LastInputInfo))
        DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($LastInputInfo))
        Do
            $iSave = DllStructGetData($LastInputInfo, 2)
            Sleep(60)
            DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($LastInputInfo))
        Until (DllStructGetData($LastInputInfo, 2) - $iSave) > $idlesec Or $MonitorIsOff = False
        Return DllStructGetData($LastInputInfo, 2) - $iSave
    EndFunc   ;==>_IdleWaitCommit
     
    Func _Monitor_Switch()
        If $MonitorIsOff Then
            _Monitor_ON()
        Else
            _Monitor_OFF()
        EndIf
    EndFunc   ;==>_Monitor_Switch
     
    Func _Quit()
        _Monitor_ON()
        Exit
    EndFunc   ;==>_Quit

    Выключается/включается с помощью Ctrl+Alt+Shift+Pause.

    Всего записей: 3267 | Зарегистр. 30-05-2007 | Отправлено: 17:27 09-06-2013 | Исправлено: Zloy_Gelud, 17:31 09-06-2013
    Astra55



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Zloy_Gelud
    То, что надо, благодарю!

    ----------
    Per warez ad scientiam

    Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 17:58 09-06-2013
    AZJIO



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

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 11:13 10-06-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Многоязычная программа - переделал пример, сделав на основе массива, исключив Assign, чтобы компилировалось без предупреждений.
    Create_list_files - переделал программу использую выше указанный алгоритм.
    FileOperations - обновил UDF, добавил возможность исключить папки из поиска, с указанием до какой вложенности его обрабатывать.
     
    Новая программка My Notepad.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 05:59 15-06-2013 | Исправлено: AZJIO, 16:34 27-06-2013
    DragonSerW



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, как лучше поступить.
     
    У меня в каталоге лежит один экзешник, на который в том же каталоге лежит установочный скрипт АвтоИт.
    Как лучше сделать так, чтобы не нужно было переписывать содержимое скрипта после измненения имени экзешника? Име меняется в зависимости от обновления версии программы (пример: ultradefrag-6.0.1.bin.i386.exe -> ultradefrag-6.0.2.bin.i386.exe).

    Всего записей: 274 | Зарегистр. 11-05-2007 | Отправлено: 23:20 03-07-2013
    AZJIO



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

    Код:
    Local $sPath
    $hSearchFile
    = FileFindFirstFile(@ScriptDir & '\ultradefrag*.exe')
    If $hSearchFile <> -1 Then
        $hFile = FileFindNextFile($hSearchFile)
        If Not @error Then $sPath = @ScriptDir & '\' & $hFile
    EndIf
    FileClose($hSearchFile)
    If Not $sPath Then Exit MsgBox(0, 'Сообщение', 'Файл не найден')
     
    MsgBox(0, 'Сообщение', $sPath)

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 03:28 04-07-2013
    DragonSerW



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

    Всего записей: 274 | Зарегистр. 11-05-2007 | Отправлено: 08:05 04-07-2013
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, как правильно пользоваться _ArrayToClip на этом примере:
    скрипт

    Код:
    #include <Array.au3> ; для _ArrayDisplay
    #include <FileOperations.au3>
     
    $aPath = _FO_PathSplit('C:\Program Files\AutoIt3\AutoIt3.exe')
    _ArrayDisplay($aPath, '$aPath')

    выдает

    Код:
    [0]|C:\Program Files\AutoIt3\
    [1]|AutoIt3
    [2]|.exe

    как отправить в буфер только C:\Program Files\AutoIt3\?

    Всего записей: 6596 | Зарегистр. 28-01-2008 | Отправлено: 13:08 04-07-2013
    ynbIpb



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

    Цитата:
    как отправить в буфер только C:\Program Files\AutoIt3\?

     
    ClipPut ($aPath[0])

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 13:37 04-07-2013
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ynbIpb, спасибо, что-то не подумал о ClipPut
    А с _ArrayToClip в принципе возможно подобное? Есть параметры $iStart/$iEnd, но у меня не получается - то все отправляется в буфер, то [1] и пустые строки, то [1] и [2] + пустая строка или ошибки.

    Всего записей: 6596 | Зарегистр. 28-01-2008 | Отправлено: 13:54 04-07-2013
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    _ArrayToClip - предназначена именно для копирования нескольких элементов массива.
    Не нужно её использовать, если необходимо дёргать по 1 ячейке.
    Точнее опишите задачу.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 18:29 04-07-2013
    Skif_off

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

    Цитата:
    Точнее опишите задачу.

    Просто изучаю, натолкнулся на тему Деление пути к файлу на части, хотел понять, как вытащить элемент из массива, решил - раз массив, то Array Management, ошибся, еще раз спасибо
     
    Добавлено:
    Кто-нибудь может выложить Модифицированную версию SciTE-Ru, если это не нарушает никаких правил и просьб? Не хотелось бы регистрироваться только ради этого.

    Всего записей: 6596 | Зарегистр. 28-01-2008 | Отправлено: 19:17 04-07-2013 | Исправлено: Skif_off, 20:16 04-07-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    Перезаливать на сторонний ресурс и выкладывать ссылку столько же времени, сколько требуется для регистрации. Кому это больше надо?
     
    Помню использовал _ArrayToClip для соединения массива в строку, а потом читал из буфера объединённый текст. Сейчас этой функции не нахожу применение (Соединить в цикле и ClipPut).
     
     
     

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 22:22 04-07-2013
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Не общительный, вопросы у меня если и возникают, то в общем мелкие, в силу более чем скромных знаний вряд-ли могу быть полезен сообществу
    Зарегался, слил, установил - таки приятнее, чем моя русификация SciTE4AutoIt3, только непонятно, зачем в панели кнопки |Null|67|\.

    Всего записей: 6596 | Зарегистр. 28-01-2008 | Отправлено: 01:40 05-07-2013
    madmasles

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

    Цитата:
    в силу более чем скромных знаний вряд-ли могу быть полезен сообществу
    А если Сообщество будет полезно Вам?

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 06:59 05-07-2013
    araneon



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

    Код:
    #Include <Date.au3>
    #Include <Array.au3>
    #Include "C:\1\AutoIt3\Include\Outlook.au3"
    $oOutlook = _OutlookOpen()
     
    _OutlookSendMail($oOutlook, "assigarev@rosneft.ru","","", @ComputerName, "The Body Rich Text","",$olFormatRichText,"","")

     
    при проверке по Ctrl+F5 всё нормально ни каких ошибок, а вот при попытке выполнить скрипт выскакивает
     

    Код:
    c:\1\AutoIt3\Include\Outlook.au3 (420) : ==> Error in expression.:
    Local $oMessage = $oOutlook.CreateItem($olMailItem)
    Local $oMessage = ^ ERROR

     

    Всего записей: 156 | Зарегистр. 18-07-2008 | Отправлено: 12:40 05-07-2013 | Исправлено: araneon, 12:47 05-07-2013
    AZJIO



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

    Код:
    $sPath = 'C:\фильм.avi'
    $hFile = FileOpen($sPath, 1)
    FileSetPos($hFile, 4, 0) ; 4 - позиция, 0 - от начала
    FileWrite($hFile, '_текст_')
    FileClose($hFile)

     
    В AutoIt3 есть возможность записать текст в средину файла, не перезаписывая весь файл. Я проверил на файле 200 Мб, который копировался несколько секунд, а запись с помощью установки указателя файла не заставила датчик жёсткого диска показать напряжённую работу с диском, при этом данные оказались записанными при просмотре в HEX-редакторе.
    То есть если файл не уменьшается в размере и не требуется сдвигать данные (вставка/удаление блока), то запись может выполнятся без перезаписи всего файла.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 04:05 06-07-2013 | Исправлено: AZJIO, 04:14 06-07-2013
    DragonSerW



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В сравке написано:
    Send("{+}") Usually checks a checkbox (if it's a "real" checkbox.)  
    Send("{-}") Usually unchecks a checkbox.
     
    При установке LibreOffice Send("{+}") работает, а вот при установке gimp Send("{-}") не работает (приходится писать Send("{SPACE}") для отжатия чекбокса).
     
    Как можно заранее узнать, будет ли работать Send("{+/-}") в конкретном инсталляторе?
     
    Другой вопрос: некоторые программы при открытии установщика выдают окно с выбором языка установки. Пример (pMetro): Если винда с английской локалью: http://i.imgur.com/bywLHPx.png ;
    если с русской: http://i.imgur.com/JI32H4p.png .
    Я ссылаюсь на это окно в скрипте AutoIt. Как можно сделать один скрипт (чтобы WinWaitActive вне зависимости от того, будет ли первый Title или второй, корректно работал)?
     
    Третий вопрос: есть такая строчка в скрипте: Global $Title='LibreOffice 4.0.4.2 - Мастер установки'
    Как её можно изменить, чтобы не нужно было её переписывать при изменении версии LibreOffice (избавиться от необходимости писать "4.0.4.2" в $Title)?
     
    Добавлено:
    На свой второй вопрос нашёл ответ в справке:
    WinWaitActive("[CLASS:TSelectLanguageForm]", "")

    Всего записей: 274 | Зарегистр. 11-05-2007 | Отправлено: 15:38 06-07-2013 | Исправлено: DragonSerW, 16:04 06-07-2013
    AZJIO



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

    Цитата:
    Usually checks a checkbox (if it's a "real" checkbox.)
    1. Есть русская справка если что.

    Цитата:
    Как можно заранее узнать, будет ли работать Send("{+/-}") в конкретном инсталляторе?
    Заранее вряд ли что-то можно знать. Как вариант ещё есть ControlCommand, ControlSend.
    2. Au3Info.exe позволит посмотреть класс окна и экземпляр, может там что-то особенное? Так же есть критерий размера окна. Вообщем надо найти какую то особенность окна, которой нет у других окон, но есть именно у этого окна.
    3. Функция AutoItSetOption, параметр WinTitleMatchMode - по умолчанию использует совпадение по началу окна, то есть достаточно указать "LibreOffice", чтобы все окна начинающиеся с этого слова являлись соответствующие критерию. То есть дальше могут быть любые номера версий, оно всё равно будет поймано это окно.

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 16:29 06-07-2013 | Исправлено: AZJIO, 16:30 06-07-2013
       

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