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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Posochov
    В начало скрипта _RefreshTrayIcons.au3 вставить текст _RefreshTrayIcons() это вызывает выполнение функции. Проверит работу просто: убить несколько процессов, иконки которых остаются в трее (обычно я делаю батником: taskkill.exe /F /IM mdm.exe /IM AnVir.exe /IM ruslat.exe /IM k-mania.exe /IM WlanMon.exe /IM ctfmon.exe)
    После этого выполнить скрипт и иконки в трее должны исчезнуть.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 13:31 26-03-2011
    Posochov



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Я именно так и делаю, как пользоваться функция я знаю, только диспетчер печати это служба, которую можно остановить или перезапустить.
    Я ее остановил, то есть процесс C:\Windows\System32\spoolsv.exe исчез, запустил после этого функцию, а иконка все равно не исчезла.
     

    Всего записей: 1703 | Зарегистр. 30-04-2005 | Отправлено: 14:02 26-03-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Posochov,
    Попробуйте сначала определить процесс и Tooltip иконки в трее:
    Код:
    #include <_SysTray.au3>
    #include <Array.au3>
     
    If @OSVersion == 'WIN_7' Then
        $i_WinVer = 2
    Else
        $i_WinVer = 1
    EndIf
    $aProcess = _SysTrayIconProcesses($i_WinVer)
    Dim $aInfo[UBound($aProcess)][2]
    For $i = 0 To UBound($aProcess) - 1
        $aInfo[$i][0] = $aProcess[$i]
        $aInfo[$i][1] = _SysTrayIconTooltip($i, $i_WinVer)
    Next
    _ArrayDisplay($aInfo)

    А потом, вставив полученные данные в следующий скрипт, попробуйте иконку из трея удалить:
    Код:
    #include <_SysTray.au3>
     
    If @OSVersion == 'WIN_7' Then
        $i_WinVer = 2
    Else
        $i_WinVer = 1
    EndIf
     
    $aProcess = _SysTrayIconProcesses($i_WinVer)
    For $i = 0 To UBound($aProcess) - 1
        If $aProcess[$i] == 'Процесс.exe' Then
            If StringInStr(_SysTrayIconTooltip($i, $i_WinVer), 'Текст подсказки') Then
                _SysTrayIconRemove($i, $i_WinVer)
                Opt('TrayIconHide', 1)
                Opt('TrayIconHide', 0)
            EndIf
        EndIf
    Next

    _SysTray.au3.
    У меня на XP работает, на 7 не проверял.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 14:40 26-03-2011
    DSWQ

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

     
    В функциях _SysTray.au3 можно не указывать версию Windows, т.к. все равно.
    И в данном случае процесс, скорее всего, "explorer.exe", и обычно у него несколько иконок в трее и Tooltip может меняться
     
    Такой код у меня работает на любой системе:
     

    Код:
    #include <Array.au3>
    #include <_SysTray.au3>
    $Titles = _SysTrayIconTitles()
    $aProcess = _SysTrayIconProcesses()
    Dim $aInfo[UBound($aProcess)][3]
    For $i = 0 To UBound($aProcess) - 1
        $aInfo[$i][0] = $Titles[$i]
        $aInfo[$i][1] = $aProcess[$i]
        $aInfo[$i][2] = _SysTrayIconTooltip($i)
    Next
    _ArrayDisplay($aInfo)

    Всего записей: 11 | Зарегистр. 20-11-2009 | Отправлено: 21:35 26-03-2011 | Исправлено: DSWQ, 21:38 26-03-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Панель функций (Snippet) - переписал из кнопочного горизонтального вида сделал ListView - вертикальный.
    Обновлено: добавлено автоскрытие и выбор любого редактора. Исправлены все баги.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 17:21 28-03-2011 | Исправлено: AZJIO, 07:35 02-04-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    я тестровал (по поводу скорости if, тема на офсайте получения путей в массив)

    Код:
    If $msg = 0 Then
        ContinueLoop
    EndIf
     
    ; и
     
    If $msg = 0 Then ContinueLoop
    и если результат условия True, то первый отрабатывает быстрее в 2 раза, а если False, то наоборот но с меньшим разрывом. Это случай, когда если чаще результат False, то выгоднее его писать в одну строку.  
    полный пример

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 07:55 29-03-2011 | Исправлено: AZJIO, 07:58 29-03-2011
    LaVas_ki

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите как сделать, что б Send ("test") всегда вводился на английском, независимо от локали программы (типа в каком языке я сейчас набираю)
    а то "test" превращается в "еуые"

    Всего записей: 1464 | Зарегистр. 03-08-2003 | Отправлено: 08:24 03-04-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LaVas_ki,
    На каком языке введете текст, на таком должно в блокнот вставить.
     

    Код:
    #include <WinAPIEx.au3>
    #include <GUIConstantsEx.au3>
     
    $hGui = GUICreate('Test', 350, 256)
    $nInput = GUICtrlCreateInput('', 32, 8, 257, 21)
    $nButton = GUICtrlCreateButton('Click', 120, 56, 113, 65)
    GUISetState()
     
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $nButton
                $sText = GUICtrlRead($nInput)
                If $sText Then
                    $sLang = Hex(_WinAPI_GetKeyboardLayout($hGui), 4)
                    Run('notepad.exe')
                    $hHandle = WinWait('[CLASS:Notepad]')
                    _WinAPI_SetKeyboardLayout($hHandle, '0x' & $sLang)
                    ControlSend('[CLASS:Notepad]', '', '[CLASS:Edit; INSTANCE:1]', $sText)
                Else
                    MsgBox(16, 'Error', 'Введите сначала текст')
                EndIf
        EndSwitch
    WEnd

    WinAPIEx.au3

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 10:54 03-04-2011 | Исправлено: madmasles, 10:57 03-04-2011
    LaVas_ki

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

    Цитата:
    На каком языке введете текст, на таком должно в блокнот вставить.

    вот в этом то и проблема
    зачастую я не знаю и знать не могу заранее на каком языке будет программа-цель
     
    т.е. в принципе если я сделаю
    _WinAPI_SetKeyboardLayout($hHandle, '0x' & $sLang)  
    (где slang = АНГЛ)
    и сразу send "text"
    то этого будет достаточно?
     
    WinAPIEx.au3 отсутвует в стандартной поставке?
     
    на оффе нашел интересный метод разбивания текста на ASC и потом в цикле ввод побуквенно ))) тема аж от 2006 года
    http://www.autoitscript.com/forum/topic/38139-how-to-send-a-character-independently-on-input-locale/#
     
    +метод через буфер - ClipPut/Send "^v"

    Всего записей: 1464 | Зарегистр. 03-08-2003 | Отправлено: 11:50 03-04-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто нибуть в курсе как установить класс окна? Все скомпилированные скрипты имеют класс "AutoIt v3 GUI". Как это поменять?

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 12:40 03-04-2011
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 12:40 03-04-2011
    Цитата:
    как установить класс окна?

    Только созданием своего окна (_WinAPI_CreateWindowEx). Но это того не стоит, вот пример, с него думаю поймёшь почему:
     
    Подробнее...
     
    Учти, почти все элементы GUI нужно будет создавать и обрабатывать вручную (т.е также через _WinAPI_CreateWindowEx, ну или использовать встроенные UDF'ы).

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 02:04 04-04-2011 | Исправлено: ViSiToR, 02:51 04-04-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Поиск по офсайту привёл к такому же результату. Видимо нужно разработчиков просить, чтоб добавили в виде опции подобно #RequireAdmin или Opt("WinTitleMatchMode", 1)

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 05:34 04-04-2011 | Исправлено: AZJIO, 06:19 04-04-2011
    ViSiToR



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

    Цитата:
    Видимо нужно разработчиков просить, чтоб добавили в виде опции подобно #RequireAdmin или Opt("WinTitleMatchMode", 1)

    Достаточно дополнительного параметра $sClassName в функций GUICreate

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 11:08 04-04-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Пример есть? там же указывается 4 параметра размера, два параметра стилей и последний - родительское окно... где же там указывать Class?

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 11:23 04-04-2011
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 11:23 04-04-2011
    Цитата:
    Пример есть? там же указывается 4 параметра размера, два параметра стилей и последний - родительское окно... где же там указывать Class?

    Неужели ты думаешь, что если был бы такой параметр, я бы стал приводить пример с CreateWindowEx?
     
    Я ответил на твоё предложение попросить разработчиков сделать новый функционал. Т.е чтобы они добавили такой параметр в GUICreate.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 11:38 04-04-2011
    madmasles

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Я утилилите "Панель функций" использую выбор окна по классу, в которое нужно делать вставку. К сожалению заголовок окна может содержать всё что угодно - путь, имя файла и в настройках это можно вкл/выкл, а класс он может быть одинаковый только если утилита запущена дважды, что более маловероятно. И утилита может отправлять текст в окна программ написанных на AutoIt3, но так как класс одинаковый, то она пытается вставить текст в себя, так как класс окна одинаковый.
     
    ViSiToR
    Понял.
    Я подумал может другие функции как то используют этот параметр и поэтому его можно использовать только ко всему проекту, а не к каждому окну в отдельности.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 13:19 04-04-2011 | Исправлено: AZJIO, 13:20 04-04-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Цитата:
    но так как класс одинаковый, то она пытается вставить текст в себя
    ИМХО, можно по Handle свое окно проверить и исключить из поиска(обработки).

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Спасибо. Хотя класс всё равно бы мог пригодится. Пока утилит мало и они не для вставки текстов, то проблема пока не важна.
     
    Переводя справку нашёл то, что давно спрашивал - вариант, когда кнопка может иметь нажатое состояние. Пример:

    Код:
    GUICtrlCreateCheckbox("--", 10,20,40,40, $BS_PUSHLIKE+$BS_ICON)
    GUICtrlSetImage (-1, "shell32.dll",22, 1)
     
    GUICtrlCreateRadio("--", 70,20,40,40, $BS_PUSHLIKE+$BS_ICON)
    GUICtrlSetImage (-1, "shell32.dll",1)
     
    GUICtrlCreateRadio("--", 70,70,40,40, $BS_PUSHLIKE+$BS_BITMAP)
    GUICtrlSetImage (-1, "32.bmp")

     
    Добавлено:
    madmasles
    Из поиска исключил, но класс то всё равно тот же и отправляет она в себя. Так что проблема осталась, плюс только в том что она исчезла из списка доступных окон.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 13:57 04-04-2011 | Исправлено: AZJIO, 14:04 04-04-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO,
    Посмотрел Вашу Панель функций (Snippet). У меня есть небольшое уточнение:
    Читать дальше..

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 15:21 04-04-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