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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    5peciali5t, вот пример как учитывать одноимённые процессы:

    Код:
    #Include <Array.au3>
    $sList = "opera.exe|iexplore.exe"; список процессов, которые мы хотим оптимизировать
    $aProcesslist = StringSplit($sList, "|") ; разбиваем список на массив
    $aAll_process = ProcessList (); собираем список из всех процессов
    $sPids = "" ; в эту переменную будем собирать пиды нужных нам процессов
    For $i=1 To $aAll_process[0][0] ; крутим цикл столько раз, котолько всего у нас процессов
        For $j=1 To $aProcesslist[0] ; крутим цикл столько раз, сколько имён процессов в нашем списке для оптимизации
            If $aAll_process[$i][0] = $aProcesslist[$j] Then ; если имя процесса равно имени из списка, то
                $sPids &= $aAll_process[$i][1] & "," ; добавляем его ПИД в переменную, разделяя запятой
            EndIf
        Next
    Next

    $sPids = StringTrimRight ($sPids, 1) ; отрезаем последнюю запятую
    $aPidsList = StringSplit($sPids, ",") ; разбиваем список на массив
    _ArrayDisplay($aPidsList)

     

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 19:24 16-03-2011 | Исправлено: ynbIpb, 19:25 16-03-2011
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ynbIpb
    спасибо за вариант.
    некто Вiтя мне уже помог написав в аську следующий вариант

    Код:
    #NoTrayIcon
     
    Global Const $interval = 2000 ;
    Global $list = "Skype.exe|skypePM.exe|firefox.exe|opera.exe|iexplore.exe|icq.exe|iexplore.exe|utorrent.exe|vmware.exe|vmware-unity-helper.exe|vmware-tray.exe|vmware-authd.exe|vmware-usbarbitrator.exe"
    Global $processlist = StringSplit($list, "|")
     ;-----
    While 1
         For $i = 1 To UBound($processlist) - 1
              $pid = ProcessExists($processlist[$i])
              If $pid Then
                   $list = ProcessList($processlist[$i])
                   for $i2 = 1 to $list[0][0]
                        ;msgbox(0, $list[$i2][0], $list[$i2][1], 1) ;для визуальной проверки во время теста
                         _ReduceMemory($list[$i2][1])
                   next
              endif
        Next
        _ReduceMemory();
        Sleep($interval)
    WEnd
     
    Func _ReduceMemory($i_PID = -1)
        If $i_PID <> -1 Then
            Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
            Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
            DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
        Else
            Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
        EndIf
     
        Return $ai_Return[0]
    EndFunc   ;

     
    поменял по мелочи
                         _ReduceMemory($list[$i2][1])

    Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 22:47 16-03-2011
    msdenis



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите пожалуйста с проблемой.
    Когда убивается процесс, то иконка этого процесса продолжает висеть в трае. Как обновить трай, что бы в нем остались иконки действующих проуцессов.
     
    Пробовал по средствам "RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True", но не помогло.
     
    Спасибо.

    Всего записей: 30 | Зарегистр. 14-03-2008 | Отправлено: 19:59 18-03-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    msdenis
    Попробуйте так:
    Код:
    #include '_SysTray.au3'
     
    $sProcess = 'Процесс.exe'
    MsgBox(64, 'Info', _Kill_Process($sProcess))
    ;или
    ;$iPID = ProcessExists('Процесс.exe')
    ;MsgBox(64, 'Info', _Kill_Process($iPID))
     
    Func _Kill_Process($v_Process)
        #cs
            закрывает процесс и убирает пустые иконки из трея.
            $v_Process - имя или PID процесса
            возвращает: -1 нет такого процесса;
                         0 ошибка;
                         1 успех.
        #ce
       Local $i_WinVer, $a_PID
     
        If @OSVersion == 'WIN_XP' Then
            $i_WinVer = 1
        Else
            $i_WinVer = 2
        EndIf
        If ProcessExists($v_Process) Then
            ProcessClose($v_Process)
            If @error Then Return 0
        Else
            Return -1
        EndIf
        $a_PID = _SysTrayIconPids($i_WinVer)
        If $a_PID = -1 Then Return 0
        For $i = 0 To UBound($a_PID) - 1
            If $a_PID[$i] = -1 Then
                If _SysTrayIconRemove($i, $i_WinVer) <> 1 Then Return 0
                Opt('TrayIconHide', 1)
                Opt('TrayIconHide', 0)
            EndIf
        Next
        Return 1
    EndFunc   ;==>_Kill_Process

     
    _SysTray.au3

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 23:33 18-03-2011 | Исправлено: madmasles, 11:36 19-03-2011
    vicbox777



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    msdenis 18:59 18-03-2011
    Цитата:
    Как обновить трай, что бы в нем остались иконки действующих проуцессов.

    Вот, работает на ура.

    Всего записей: 165 | Зарегистр. 17-06-2008 | Отправлено: 00:16 19-03-2011
    AZJIO



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

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 17:16 23-03-2011 | Исправлено: AZJIO, 09:41 24-03-2011
    bobojon



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброго времени суток ребята.
    Надеюсь, поможете новичку с написанием одного очень важного скрипта.
    Есть некий  почтовый клиент на который каждые 10 минут приходят сообщения с файлами.
     В окне клиента получается будут старые и новые сообщения- новые сообщения будут выделяться жирным текстом. Надо сделать так, чтобы если в окне клиента появятся несколько новых сообщений, скрипт по очереди выделил сначало первое сообщение (подождал 2 секунды) и нажал например на кнопочку с ID 16 а потом уже выделил второе сообщение и сделал тоже самое.
    Заранее благодарен!

    Всего записей: 53 | Зарегистр. 06-03-2008 | Отправлено: 14:43 24-03-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bobojon,
    Какой это почтовый клиент?

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 16:48 24-03-2011
    SRUnaRU



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    рпвваолжкуоемрци

    Всего записей: 29 | Зарегистр. 21-01-2011 | Отправлено: 16:52 24-03-2011
    bobojon



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    madmasles
    почтовый клиент A-mail

    Всего записей: 53 | Зарегистр. 06-03-2008 | Отправлено: 08:37 25-03-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bobojon
    Цитата:
    почтовый клиент A-mail
    Этот?

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



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

    Всего записей: 53 | Зарегистр. 06-03-2008 | Отправлено: 09:54 25-03-2011
    madmasles

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

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



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    madmasles
    проверьте входящие сообщения.!

    Всего записей: 53 | Зарегистр. 06-03-2008 | Отправлено: 13:37 25-03-2011
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bobojon,
    Судя по скриншоту на сайте список писем отображается в SysListView32. Вам нужно посмотреть, какой у него ID. Потом попробуйте следующее:
    Код:
    #include <GuiListView.au3>
    #include <Array.au3>
     
    Dim $aMail[1][2]
    $sTitle = 'A-MAIL'
     
    $hWin = WinWait($sTitle)
    $hListView = ControlGetHandle($hWin, '', '[CLASS:SysListView32; INSTANCE:1]') ;у Вас может быть другой.
    $iCountColumn = _GUICtrlListView_GetColumnCount($hListView) ;кол-во колонок
    $iCountRow = _GUICtrlListView_GetItemCount($hListView) ;кол-во строк
    If $iCountRow Then ;есть строки
        ReDim $aMail[$iCountRow][3]
        For $i = 0 To $iCountRow - 1
            For $j = 0 To $iCountColumn - 1
                $aMail[$i][0] &= _GUICtrlListView_GetItemText($hListView, $i, $j) & ' ' ; текст всех колонок собираем в одну строку.
            Next
            $aMail[$i][1] = _GUICtrlListView_GetItemImage($hListView, $i);посмотрите, какая цифра, если есть скрепка.
            _GUICtrlListView_SetItemSelected($hListView, $i)
            Sleep(1000)
        Next
        _ArrayDisplay($aMail)
    Else
        MsgBox(64, 'Info', 'Нет писем')
    EndIf


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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Windows 7.
    После принудительной очистки очереди печати, путем удаления файлов из папки C:\Windows\System32\spool\PRINTERS и перезапуска службы диспетчера печати в трее остается значок очереди печати, который никакими ручными средствами не удалить.
    В XP в контекстном меню значка был пункт "Обновить .." при выборе которого значок исчезал, а в семерке такого пункта нет.
     
    Вопрос очевидный:
    Как удалить из трея значок очереди печати?

    Всего записей: 1703 | Зарегистр. 30-04-2005 | Отправлено: 02:45 26-03-2011 | Исправлено: Posochov, 02:47 26-03-2011
    AZJIO



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

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 09:45 26-03-2011 | Исправлено: AZJIO, 09:52 26-03-2011
    Posochov



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Похоже это то, что надо, только непонятно как этой функцией пользоваться.
    Простой запуск функции ничего не дает, какое то блымание в трее проходит, а иконка очереди печати остается.
     
    PS
    В программе я заменил WIN_VISTA на WIN_7.

    Всего записей: 1703 | Зарегистр. 30-04-2005 | Отправлено: 12:26 26-03-2011 | Исправлено: Posochov, 12:40 26-03-2011
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Posochov
    На Win7 не проверял.
     
    Кому интересно попробовал сделать видео-урок новичкам - создание скрипта с нуля. Пример GUI-оболочки с запуском внешнего скрипта. Видео - 8 минут, 3.4Мб. Скачать.

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



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

    Попробовал на XP просто запустить функцию - тоже ничего не дало.
    Так как же все таки ей пользоваться?
    Просто запустить функцию и все?
    Или какие параметры надо ей задавать и обрабатывать?

    Всего записей: 1703 | Зарегистр. 30-04-2005 | Отправлено: 13:11 26-03-2011 | Исправлено: Posochov, 13:19 26-03-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