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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
     
    Пожалуйста, можно подробнее, в функции StringRegExpReplace, как и в регулярных выражениях в целом, к сожалению не разбираюсь.
    Повторюсь, имена каталогов и файлов, которые требуется переименовать (отсечь суффикс _dat в конце) в корне диска должны считываться из "*.ini-файла", приблизительно следующей структуры (если, это конечно возможно):
     
    [Folders and Files List]
    1=Folder1_tmp
    2=Folder2_tmp
    3=File1.dat_tmp
    4=File2.dat_tmp
     
    У Вас они задаются в теле скрипта.

    Цитата:
    Local $sFile = @ScriptDir & '\File1.dat_tmp', $sDir = @ScriptDir & '\Folder1_tmp', $sDel = '_tmp'  

     
    Помогите решить эту нелегкую (для меня) задачу.

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 14:00 30-03-2015 | Исправлено: Artem_Butenko, 14:25 30-03-2015
    Detsle



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

    Цитата:
    Так запускай ее как сервис, имя соответвующее дай.  
    Троянчик?  

    Сервис всё равно общается к процессу, так что это не поможет.
    Нет, не троян, просто прогу маскирую) чтобы особо умные не закрывали.

    Всего записей: 283 | Зарегистр. 15-10-2007 | Отправлено: 14:31 30-03-2015
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko,
    Если суффикс всегда начинается символом "_", то можно сделать примерно так:
    Код:
    #cs ----------------------------------------------------------------------------
        AutoIt Version: 3.3.8.1+
        Author:         madmasles
    #ce ----------------------------------------------------------------------------

     
    #include <WinAPIEx.au3>
     
    Local $sWorkingDir = @ScriptDir, $sIni = 'test.ini', $sSect = 'Folders and Files List', $aList, $sNewName, $iCountReName = 0
     
    If @WorkingDir <> $sWorkingDir Then FileChangeDir($sWorkingDir)
    $aList = IniReadSection($sIni, $sSect)
    If @error Then Exit 13
    For $i = 1 To $aList[0][0]
        If Not FileExists($aList[$i][1]) Then ContinueLoop
        If _WinAPI_PathIsDirectory($aList[$i][1]) Then
            If DirMove($aList[$i][1], StringLeft($aList[$i][1], StringInStr($aList[$i][1], '_', 2, -1) - 1), 1) Then $iCountReName += 1
        Else
            If FileMove($aList[$i][1], StringLeft($aList[$i][1], StringInStr($aList[$i][1], '_', 2, -1) - 1), 1) Then $iCountReName += 1
        EndIf
    Next
    ConsoleWrite($aList[0][0] & @TAB & $iCountReName & @LF)
    test.ini:
    Код:
    [Folders and Files List]
    ;поменяйте на свои пути относительно папки $sWorkingDir.
    1=Test\Folder1_tmp
    2=Test\Folder2_tmp
    3=Test\File1.dat_tmp
    4=Test\File2.dat_tmp

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 15:04 30-03-2015 | Исправлено: madmasles, 06:53 02-04-2015
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko
    Лучше не ini файл а так:

    Цитата:
    Folder1_tmp|Folder2_tmp
    File1.dat_tmp|File2.dat_tmp

    или на крайний случай если обязательно ini, то

    Цитата:
    [Folders and Files List]
    1=Folder1_tmp|Folder2_tmp
    2=File1.dat_tmp|File2.dat_tmp
    Это не стребует привязки к параметрам. И можно обойтись без регулярных выражений. Например FileReadToArray прочитает построчно в массив, и потом StringSplit разделить строку разделителем "|".

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 15:13 30-03-2015
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
     
    Интересно, а скрипт можно увидеть? Если конечно у Вас есть время, я не настаиваю. Хорошо, когда есть еще варианты, все пригодится.
     
    И коллекция скриптов в ветке подрастёт, может быть в будущем еще форумчанам понадобится.

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 15:53 30-03-2015 | Исправлено: Artem_Butenko, 16:06 30-03-2015
    Skif_off

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

    Всего записей: 6489 | Зарегистр. 28-01-2008 | Отправлено: 16:35 30-03-2015 | Исправлено: Skif_off, 16:36 30-03-2015
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off,
    Как я понимаю, $iDispToSleep - это секунды.
    Еще есть функция _WinAPI_SetThreadExecutionState().

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 18:50 30-03-2015 | Исправлено: madmasles, 18:53 30-03-2015
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    Точно, забыл добавить пересчёт, отвлёкся на __MouseMove(), спасибо А с __MouseMove() всё логично? Что-то мне не нравится, но что - не пойму.

    Цитата:
    Еще есть функция _WinAPI_SetThreadExecutionState().

    Спасибо, в WinAPI, кажется, есть всё ) Не понял, как работает, просто добавить функцию с флагом _WinAPI_SetThreadExecutionState($ES_SYSTEM_REQUIRED) и всё?
    Тоже не совсем понятно, как управлять: была мысль "привязать" к конкретному процессу, добавив While...WEnd и ProcessExists('name'), надо подумать.
     
    Кто в курсе, напомните, пожалуйста, как можно делать чекбоксы/кнопки и прочее, читая пункты из конфига, но если заранее неизвестно, сколько их будет всего? Обсуждалось, но не соображу, как сформулировать поисковый запрос.

    Всего записей: 6489 | Зарегистр. 28-01-2008 | Отправлено: 21:40 30-03-2015
    NIKZZZZ



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

    Цитата:
    как можно делать чекбоксы/кнопки и прочее, читая пункты из конфига,  

    Пример

    Код:
    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
     
    $asTest = IniReadSection('test.ini', 'test')
     
    $form1 = GUICreate("test", 499, 388)
    $TREEVIEW = GUICtrlCreateTreeView(8, 8, 481, 177, BitOR($TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES, $WS_GROUP, $WS_TABSTOP))
    For $i = 1 To $asTest[0][0]
        GUICtrlCreateTreeViewItem($asTest[$i][1],$TREEVIEW)
    Next
    GUISetState(@SW_SHOW)
    While 1
        $MSG = GUIGetMsg()
        If $MSG = $Gui_EVENT_CLOSE Then Exit
    WEnd
     


    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 03:09 31-03-2015
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    Цитата:
    Не понял, как работает, просто добавить функцию с флагом _WinAPI_SetThreadExecutionState($ES_SYSTEM_REQUIRED) и всё?
    У меня есть скрипт, который отрабатывает примерно за 1,5 - 2 часа.  Чтобы не отключался экран (спящий режим у меня отключен), я в начале выполняю функцию _WinAPI_SetThreadExecutionState с флагом BitOR($ES_DISPLAY_REQUIRED, $ES_CONTINUOUS), а в конце с $ES_CONTINUOUS. В Вашем случае, если Вам надо дождаться окончания работы какого-то процессе, ИМХО, можно выполнить функцию с флагом, например, BitOR($ES_SYSTEM_REQUIRED, $ES_CONTINUOUS) (подробнее читайте здесь), в цикле проверять наличие процесса, и, по его завершению, с флагом $ES_CONTINUOUS и выход.

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 05:10 31-03-2015 | Исправлено: madmasles, 05:11 31-03-2015
    Habib2302



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброе время суток.#

    Всего записей: 529 | Зарегистр. 09-05-2012 | Отправлено: 15:23 31-03-2015
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    NIKZZZZ
    Спасибо, разобрался, только переделал с ListView (чтобы PID был в отдельной колонке)

    Всего записей: 6489 | Зарегистр. 28-01-2008 | Отправлено: 15:55 31-03-2015 | Исправлено: Skif_off, 15:55 31-03-2015
    nag

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, как отправить сочетание клавиш для группы компьютеров в домене, чтобы эта комбинация отработалась на каждой локальной машине?
    Например, после запуска программы Х на отдельном компьютере, необходимо послать 1, 3, 5 компьютерам в домене сочетание "Win+Shift+RArrow", а компьютерам 2, 4, 6 - "Win+Shift+LArrow"? Возможно ли такое?
    Спрашиваю для оценки, стоит ли связываться с AutoIt, или искать другое решение?

    Всего записей: 858 | Зарегистр. 01-10-2003 | Отправлено: 15:22 02-04-2015
    jekov



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Укажите новичку, где можно ознакомится с переменными подобного типа: $objItem.DeviceID;$objWMIService.ExecQuery;$objItem.Caption и т.п. Спасибо!

    Всего записей: 1272 | Зарегистр. 11-09-2005 | Отправлено: 09:52 03-04-2015
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    jekov
    Цитата:
    где можно ознакомится с переменными подобного типа: $objItem.DeviceID;$objWMIService.ExecQuery;$objItem.Caption и т.п.
    Например, здесь: WMI ScriptOMatic

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 15:24 03-04-2015
    jekov



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

    Цитата:
    Например, здесь: WMI ScriptOMatic

    Спасибо ! Однако толку от линка, никакого для меня. Там прога с типовыми классами для au3 скрипта, без разъяснении и простого хелпа.

    Всего записей: 1272 | Зарегистр. 11-09-2005 | Отправлено: 19:23 04-04-2015
    dialmak



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    jekov
    WMI браузер включен в поставку Autoit.

    Код:
    "C:\Program Files (x86)\AutoIt3\Examples\COM\Scriptomatic.au3"
    или
    "C:\Program Files\AutoIt3\Examples\COM\Scriptomatic.au3"

    Если что неясно - нужно читать про WMI.

    Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 19:30 04-04-2015 | Исправлено: dialmak, 19:36 04-04-2015
    jekov



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

    Цитата:
    Если что неясно - нужно читать про WMI

    Спасибо! В аптеку уже сходил, мне посто нужно для себя растолковать
    Цитата:
    переменные подобного типа: $objItem.DeviceID;$objWMIService.ExecQuery;$objItem.Caption

    и как ими пользуются. А то что советуете не лишнее, но не хелп ведь.

    Всего записей: 1272 | Зарегистр. 11-09-2005 | Отправлено: 20:54 04-04-2015
    dialmak



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

    Цитата:
    как ими пользуются

    Вопрос некорректный. Пример WMI запроса. Что вам непонятно в коде ниже?
     

    Код:
    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $sComputer = "localhost"
     
    $Output=""
    $Output = $Output & "Computer: " & $sComputer  & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $oWMIService = ObjGet("winmgmts:\\" & $sComputer & "\")
    $colItems = $oWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", _
                                              $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
     
    If IsObj($colItems) Then
       For $objItem In $colItems
          $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
          $Output = $Output & "OSArchitecture: " & $objItem.OSArchitecture & @CRLF
          $Output = $Output & "OSLanguage: " & $objItem.OSLanguage & @CRLF
          $Output = $Output & "RegisteredUser: " & $objItem.RegisteredUser & @CRLF
          $Output = $Output & "BootDevice: " & $objItem.BootDevice & @CRLF
          $Output = $Output & "SystemDevice: " & $objItem.SystemDevice & @CRLF
          $Output = $Output & "Version: " & $objItem.Version & @CRLF
          If MsgBox(1,"WMI Output",$Output) = 2 Then ExitLoop
          $Output=""
       Next
    Else
       MsgBox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_OperatingSystem" )
    EndIf

     
    Добавлено:
    Тот же вывод, но в CMD  

    Код:
    wmic PATH Win32_OperatingSystem GET Caption,OSArchitecture,OSLanguage,RegisteredUser,BootDevice,SystemDevice,Version  /format:LIST
    pause

    http://i.imgur.com/DSPKBCg.png

    Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 21:32 04-04-2015 | Исправлено: dialmak, 21:48 04-04-2015
    Habib2302



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброе время суток. Как сделать автоматический ввод текста в строку
     


    Всего записей: 529 | Зарегистр. 09-05-2012 | Отправлено: 18:52 05-04-2015 | Исправлено: Habib2302, 08:10 06-04-2015
       

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