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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Утилитка мониторит USB, открывает в файловом менеджере диск при вставке флешки. Если запустить с параметром /l то откроет флэшку или гуи с кнопками, взависимости от настроек исключений в ini
     
    Обновлено.
    Добавлено автоматическое добавление дисков в меню иконки в трее, а также отображение количества дисков на иконке.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 03:59 07-02-2011 | Исправлено: AZJIO, 19:33 08-02-2011
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    в интернет експлорере делаю focus не ссылку и шлю туда SHIFT-ENTER. как получиьт HWND открывшегося эксплорера если их уже в системе много?

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 11:48 07-02-2011
    Kar1son

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

    Код:
    $aWinlist = WinList('SAPE.RU')
     
    ; тут что-то делается
     
        Sleep(5000)
        $aNewWinlist = WinList('SAPE.RU')
     
        For $i = 1 To $aWinlist[0][0]
            If _ArraySearch($aNewWinlist, $aWinlist[$i][1]) Then $aNewWinlist[$i][1] = 0
        Next
     
        For $i = 1 To $aNewWinlist[0][0]
            If IsHWnd($aNewWinlist[$i][1]) Then
                $oIE_1 = _IEAttach(($aNewWinlist[$i][1], 'HWND',1)
                ExitLoop
            EndIf
        Next
     
        _IEQuit($oIE_1)

     
    вылится на строке             
    $oIE_1 = _IEAttach(($aNewWinlist[$i][1], 'HWND',1)
    причем ошибка внутри самой функции _IEAttach

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 12:41 08-02-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son,
    А так:
    Код:
    #include <IE.au3>
    #include <Array.au3>
     
    $oIE_1 = ''
    $hNewIE = 0
    $aWinlist = WinList('[Class:IEFrame]')
     
    ; тут что-то делается
     
    Sleep(5000)
    $aNewWinlist = WinList('[Class:IEFrame]')
     
    For $i = 1 To $aNewWinlist[0][0]
        If _ArraySearch($aWinlist, $aNewWinlist[$i][1]) = -1 Then
            $hNewIE = $aNewWinlist[$i][1]
            $oIE_1 = _IEAttach($hNewIE, 'HWND')
            ExitLoop
        EndIf
    Next
    If $hNewIE Then
        MsgBox(0, '', IsObj($oIE_1) & @CRLF & _IEPropertyGet($oIE_1, 'locationurl'))
    EndIf

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 13:35 08-02-2011
    Kar1son

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

    Код:
    $aWinlist = WinList('[CLASS:IEFrame]')
     
    ; bla-bla-bla
     
        Sleep(5000)
        $aNewWinlist = WinList('[CLASS:IEFrame]')
     
        For $i = 1 To $aWinlist[0][0]
            If _ArraySearch($aNewWinlist, $aWinlist[$i][1]) Then $aNewWinlist[$i][1] = 0
        Next
     
        For $i = 1 To $aNewWinlist[0][0]
            If IsHWnd($aNewWinlist[$i][1]) Then
                $h = $aNewWinlist[$i][1]
                $oIE_1 = _IEAttach($h, 'HWND')
                ExitLoop
            EndIf
        Next
        ConsoleWrite(1 & @CRLF)

    он в консоль ничего не пишет, падает с ошибкой в файле IE.au3

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son
    Цитата:
     падает с ошибкой в файле IE.au3
    Вы внимательно сравните свой код и мой.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 17:18 08-02-2011
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    на всякий случай скопировал твой кусок и вставил в свой скрипт - тоже самое вылетает на _IEAttach
     
    Добавлено:

    Код:
    #include <IE.au3>
    #include <Array.au3>
     
     
    $oIE=_IECreate('http:\\ya.ru')
     
     
     
     
     
    $aWinlist = WinList('[CLASS:IEFrame]')
        $oLinks = _IELinkGetCollection($oIE)
        $iIndex = 0
        For $oLink In $oLinks
            If StringInStr($oLink.href, 'http://www.artlebedev.ru/') Then
                _IEAction($oLink, 'focus')
                Send('{SHIFTDOWN}{ENTER}{SHIFTUP}')
                ExitLoop
            EndIf
            $iIndex += 1
        Next
     
     
        Sleep(5000)
        $aNewWinlist = WinList('[CLASS:IEFrame]')
     
        For $i = 1 To $aWinlist[0][0]
            If _ArraySearch($aNewWinlist, $aWinlist[$i][1]) Then $aNewWinlist[$i][1] = 0
        Next
     
        For $i = 1 To $aNewWinlist[0][0]
            If IsHWnd($aNewWinlist[$i][1]) Then
                $h = $aNewWinlist[$i][1]
                ConsoleWrite(IsHWnd($h) & @CRLF)
                $oIE_1 = _IEAttach(HWnd($h), 'HWND')
                ExitLoop
            EndIf
        Next
        ConsoleWrite(1 & @CRLF)
        Sleep(5000)
        _IEQuit($oIE_1)

     
    вот этот код валится, я его просто для яндекса переписал...

    Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 17:24 08-02-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kar1son,
    У меня все работает:
    Код:
    #include <IE.au3>
    #include <Array.au3>
     
    $oIE_1 = ''
    $hNewIE = 0
     
    $oIE = _IECreate('http:\\ya.ru')
    $aWinlist = WinList('[Class:IEFrame]')
    $oLinks = _IELinkGetCollection($oIE)
    For $oLink In $oLinks
        If StringInStr($oLink.href, 'http://www.artlebedev.ru/') Then
            _IEAction($oLink, 'focus')
            $hIE = _IEPropertyGet($oIE, 'hwnd')
            ControlSend($hIE, '', 'Internet Explorer_Server1', '+{ENTER}')
            ExitLoop
        EndIf
    Next
    _IELoadWait($oIE)
    Sleep(1000)
    $aNewWinlist = WinList('[Class:IEFrame]')
    For $i = 1 To $aNewWinlist[0][0]
        If _ArraySearch($aWinlist, $aNewWinlist[$i][1]) = -1 Then
            $hNewIE = $aNewWinlist[$i][1]
            $oIE_1 = _IEAttach($hNewIE, 'HWND')
            ExitLoop
        EndIf
    Next
    If $hNewIE Then
        MsgBox(0, '', IsObj($oIE_1) & @CRLF & _IEPropertyGet($oIE_1, 'locationurl'))
    EndIf
    Windows Xp SP3 IE8.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 21:21 08-02-2011 | Исправлено: madmasles, 22:26 08-02-2011
    Zakkazak



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

    Цитата:
    Цитата:переход в папку активной программы (процесса)  
     
    Попробуйте так:
    Код:#include <WinAPIEx.au3>  
     
    ;по окну:  
    $iPID = WinGetProcess('[Class:AkelPad4]')  
    ;по имени процесса:  
    ;$sProcess = 'AkelPad.exe'  
    ;$iPID = ProcessExists($sProcess)  
    If Not $iPID Then  
        MsgBox(64, 'Info', 'Нет процесса')  
        Exit  
    EndIf  
    $sPath = _WinAPI_GetProcessFileName($iPID)  
    If Not @error Then  
    AutoIT
     
    да, но нужено чтоб переходил в папку ЛЮБОГО активного приложения, а не только для AkelPad

    Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 23:08 08-02-2011
    vicbox777



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO 19:34 05-02-2011
    Цитата:
    Хочу сделать одну вещь, посмотрите - прозрачность толком не работает.

    AZJIO 02:56 06-02-2011
    Цитата:
    Немного переделал, получилось создать один гуи на весь экран и задавать координаты картинкам (взамен перемещения гуи по экрану), но пока не удалось создавать одновременно несколько картинок.

    А если так:
    Подробнее...

    Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 23:14 08-02-2011
    AZJIO



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

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 01:08 09-02-2011
    Kar1son

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    спасибо, проверил - дело в моем компе, попробовал на другом и оба варианта работают, на моем оба дают одну и ту же ошибку.
     
    добавлено: переставил IE и все заработало
     
     
    Добавлено:
    madmasles
    как оказалось Sleep(1000) критично, попытка заменить на  

    Код:
    ;~ Sleep(1000)
        While 1
            $aNewWinlist = WinList('[CLASS:IEFrame]')
            If $aNewWinlist[0][0] <> $aWinlist[0][0] Then ExitLoop
        WEnd
     

    не прошла (хотя на мой взгляд должно работать)
    чегоб придумать? а то вдруг в какойто момент секунды не хватит, а ждать лишнее время тоже не хочется

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zakkazak
    Цитата:
    нужено чтоб переходил в папку ЛЮБОГО активного приложения, а не только для AkelPad
    С AkelPad я Вам просто пример привел. Попробуйте так:
    Код:
    #include <WinAPIEx.au3>
     
    HotKeySet('^{1}', '_OpenActive') ;Ctrl+1 - открыть папку активного окна.
    HotKeySet('{Esc}', '_Exit') ; Esc - выход
    While 1
        Sleep(100)
    WEnd
     
    Func _OpenActive()
        Local $hActive, $sClass, $iPID, $sPath
     
        $hActive = WinGetHandle('[ACTIVE]')
        If Not $hActive Then Return
        $sClass = _WinAPI_GetClassName($hActive)
        If $sClass == 'CabinetWClass' Or $sClass == 'Progman' Or $sClass == 'Shell_TrayWnd' Then Return
        $iPID = WinGetProcess($hActive)
        $sPath = _WinAPI_GetProcessFileName($iPID)
        If @error Then Return
        ;только папку открыть:
        $sPath = StringRegExpReplace($sPath, '\\[^\\]*$', '')
        ShellExecute($sPath)
        ;открыть папку и выделить файл:
        ;Run('Explorer.exe /select,"' & $sPath & '"')
    EndFunc   ;==>_OpenActive
     
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit


    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 13:36 10-02-2011
    Zakkazak



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    спасибо, отменно работает !
    очень универсальный скрип получился
     
    Для реестра можно подобное сделать:  
    перейти в ветку активного приложения ?

    Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 15:19 10-02-2011 | Исправлено: Zakkazak, 15:33 10-02-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zakkazak
    А что за ветка активного приложения? Её в реестре можно назвать как угодно, и в разных разделах.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 00:45 11-02-2011
    Mont1

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет!
     
    Кто-нибудь знает, как можно сохранить скрин активного окна, в файл?
     
     
     
    Добавлено:

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

    Всё. Я сам разобрался.
    Если кому интересно, то в папке с AutoIT3 есть подпапка Include. В ней есть файл ScreenCapture.au3  
    Там есть уже написаная функция, которая сохраняет скирн экрана в файл.

    Всего записей: 49 | Зарегистр. 15-10-2008 | Отправлено: 07:46 11-02-2011
    Kar1son

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

    Цитата:
    Если кому интересно, то в папке с AutoIT3 есть подпапка Include. В ней есть файл ScreenCapture.au3  
    Там есть уже написаная функция, которая сохраняет скирн экрана в файл.

    и все это есть в справке

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    настройки из этой веточки, если они есть

    Код:
    hkcu\Software\

    Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 11:55 11-02-2011
    AZJIO



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

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 19:23 11-02-2011
    Zakkazak



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

    Цитата:
    Да я знаю, что это официальный раздел для софта, но не понимаю как скрипт это будет угадывать. Если для процесса, то тут прямая зависимость мы кликнули на файл, он исполняется, то с реестром я сам могу указать одну ветку, а могу другую указать, могу для всех пользователей раздел использовать, могу для текущего пользователя, могу часть настроек хранить вообще в выдуманом мной резделе или в кеше, чтоб никто не догадался, только не понятно как скрипт будет угадывать что я придумал.

    я конечно же не настаевую, потому-что не имею представление об осуществимости задачи..
     
    а нельзя ли по такому алгоритму :
    если хранит прога настройки в hkcu\Software\прога  , то скрипт открывает эту ветку,
    а если нет, ну и чёрт с ним, скрипт ничего не открывает

    Всего записей: 995 | Зарегистр. 12-01-2005 | Отправлено: 00:51 12-02-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