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

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO, спасибо вам за ответы, очень выручаете.
     
    Сейчас запощу свою переписку с Sanja Alone - я не получил от него ответы на те вопросы, что задавал, хотелось бы от сообщества ру-борда услышать ответы:
     
    Александр, здравствуйте. В ваших скриптах присутствуют такие записи:
     
    AutoItSetOption("SendKeyDelay", 10)
    If ProcessExists ( "ps.exe" )<>0 Then
         ProcessClose ( "ps.exe" )
         ProcessWaitClose ( "ps.exe" )
    EndIf
    ;нельзя блокировать при находящемся в памяти Punto Switcher-е - не будет работать установка
    ;блокируем мышь и клаву
    ;If @OSType="WIN32_NT" Then BlockInput ( 1 )
     
    У меня вопросы по каждой из этих строк:
    1) Зачем менять задержку со стандартных 5 мс до 10-и?
    2) Процесс Пунто Свинчера сейчас называется punto.exe. Насколько я проверял, блокировка срабатывает при запущенном Пунто. Так нужно ли убивать процесс Пунто Свитчера?
    3) Зачем писать "If @OSType="WIN32_NT" Then BlockInput ( 1 )", если можно просто написать команду "BlockInput ( 1 )"?
     
    С уважением, Сергей Швайко.
     
     
    Александр Навроцкий
        
    Приветствую, Сергей.
     
    Скрипты писались давно, логика своя была. Стандартной задержки порой не хватало, и сенды в эдит-поля проходили неверно. Были нюансы со свитчером, еще в его дояндексовскую эпоху, сейчас - без понятия что там и как. С блокировкой ввода уже не помню с чем была связана проверка. Вот такие дела, просто я сейчас по работе немного другими вещами занимаюсь, автоиту там почти нет места...

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



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

    Цитата:
    Сейчас запощу свою переписку с Sanja Alone
    Sanja Alone разрешил выкладывать переписку? Обычно личку не постят, если только свою часть вопросов, да и в общем то достаточно свои вопросы задавать.
    Если взять мои старые скрипты они тоже будут иметь какие то конструкции которые сейчас бы я уже не делал, процесс развития ведь не стоит на месте.
    Вообще совет, просто пиши свой скрипт не обращая внимания на чужой. Логика проста, запускаешь установку и смотришь что по ходу нужно кликать, всё равно с новой версией программы может многое измениться, другое количество окон, другие элементы окна, так что гарантии, что скрипт будет вечным нет. Да и вообще можно ведь запустить с ключом тихой установки.
    Это
    If ProcessExists ( "ps.exe" )<>0 Then
    можно написать так:
    If ProcessExists ( "ps.exe" ) Then
     
    Задержка AutoItSetOption("SendKeyDelay", 10) устанавливается по ходу дела, если есть проблема, то есть по умолчанию настроено оптимально.
    Если блокируется мышь, то лучше зарегистрировать AdlibRegister, чтобы разблокировать клавиатуру в случае повисания скрипта на паузе, мало ли, окно не удалось дождаться или ещё что нибудь, а пользователь окажется в ситуации не понимания что делать и нажмёт кнопку перезагрузки системы на компьютере.

    Цитата:
    3) Зачем писать  
    Просто удаляй всё что считаешь ненужным. Когда начнёшь устанавливать поймёшь, что действительно необходимо. @OSType я пока тоже не понимаю, ведь на маке или на линуксе AutoIt3 вообще не будет работать, так что зачем проверять то, что и так является по умолчанию.
     
    Смотри в справке раздел по работе с окнами, там сейчас в примерах более современные способы манипуляции. В качестве примеров автоматизации окон можешь посмотреть мои пару вариантов "автоматизация окна MegaFon", автоматизация Password Commander
    Обычно если получил окно то в качестве параметров используешь его дескриптор. Делаешь проверки, на то что окно поймано, с помощью функций ControlClick и других того же раздела выполняешь операции непосредственно с указанным окном, а Send может быть выслано не по назначению.

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 01:16 07-07-2013
    Daniyar91

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто шарит в AutoIt и Lua.
    Помогите портировать функцию _ArrayCombinations() на Lua, я сам попытался, но функция работает не правильно.
    Оригинальные функции

    Разобрался сам, код.

    Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 01:21 10-07-2013 | Исправлено: Daniyar91, 18:13 10-07-2013
    Daniyar91

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Оказывается, что функция _ArrayCombinations() работает  неправильно:
    Допустим есть массив - $avArray[4] = [1, 2, 3, 4]
    вызываем функцию - $aArrayCombo = _ArrayCombinations($avArray, 4, ':::')
    в итоге получаем - $aArrayCombo[1] = 1:::2:::3:::4:: а должно быть 1:::2:::3:::4
    так получается потому-что функция не учитывает длину разделителя, в ней есть такая проверка:
    If $sDelim <> "" Then $aResult[$iCount] = StringTrimRight($aResult[$iCount], 1)
    а надо чтоб было:
    If $sDelim <> "" Then $aResult[$iCount] = StringTrimRight($aResult[$iCount], StringLen($sDelim)).

    Всего записей: 425 | Зарегистр. 30-08-2011 | Отправлено: 04:55 11-07-2013 | Исправлено: Daniyar91, 00:07 12-07-2013
    DragonSerW



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO, да вроде ничего личного в переписке не было - поэтому и выложил.
    Благодарю за ваши ответы.

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



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

    Всего записей: 4409 | Зарегистр. 03-05-2006 | Отправлено: 15:55 14-07-2013
    araneon



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята помогите, уже всю голову сломал с этим Outlook-ом
    Не могу отправить сообщение через Outlook средствами Autoit
    уже писал
     

    Код:
    #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,"","")

     
    при попытке выполнить скрипт выскакивает

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

     
    не пойму что не так ?

    Всего записей: 156 | Зарегистр. 18-07-2008 | Отправлено: 08:43 16-07-2013 | Исправлено: araneon, 08:43 16-07-2013
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    araneon, принципиально использовать Outlook?
    можно например вот такой вариант рассмотреть: http://autoit-script.ru/index.php?topic=783.msg13596#msg13596

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 09:32 16-07-2013
    araneon



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    К сожалению да, принципиально.
    Так как нужно, создать форму в которой пользователь вводит текст и нажимает кнопочку Отправить.
    Данный текст (который написал пользователь) берётся с этой формы и отправляется на один Email (test@domen.ru) и всё.
    Так ка пользователей более 300 и в целях безопастности пароли к учёткам меняют пользователи 1 раз в 2-3 месяца то Outlook становится (к сожалению) принципиальным (((
    Подскажите плизз как такое реализовать ?
     
    Добавлено:
    Пробую UDF OutlookEX, функцию _OL_Wrapper_SendMail
     

    Код:
    #AutoIt3Wrapper_AU3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #AutoIt3Wrapper_AU3Check_Stop_OnWarning=Y
    #include <OutlookEX.au3>
     
    Global $oOutlook = _OL_Open()
    If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF", "Error creating a connection to Outlook. @error = " & @error & ", @extended = " & @extended)
     
    ; *****************************************************************************
    ; Example 1
    ; Send a html mail to the current user.
    ; Add an attachment and set importance to high.
    ; *****************************************************************************
    Global $sCurrentUser = $oOutlook.GetNameSpace("MAPI").CurrentUser.Name
    _OL_Wrapper_SendMail($oOutlook, $sCurrentUser, "", "", "TestSubject", "Body
    <b>fett</b> normal."
    , @ScriptDir & "\_OL_Wrapper_SendMail.au3", $olFormatHTML, $olImportanceHigh)
    If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF: _OutlookSendMail Wrapper Script", "Error sending mail. @error = " & @error & ", @extended: " & @extended)
    MsgBox(64, "OutlookEX UDF: _OutlookSendMail Wrapper Script", "Mail successfully sent to user '" & $sCurrentUser & "'!")
     
    _OL_Close($oOutlook)

     
    и опыть же беда  
     

    Всего записей: 156 | Зарегистр. 18-07-2008 | Отправлено: 10:46 16-07-2013
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    araneon,  тогда думаю стоит убедиться в актуальности используемой версии.
    первоисточник: http://www.autoitscript.com/forum/topic/126305-outlookex-udf/

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 19:02 16-07-2013
    araneon



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    К сожалению использую подледную версию OutlookEX UDF 0.9.0.0

    Всего записей: 156 | Зарегистр. 18-07-2008 | Отправлено: 10:39 17-07-2013
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Даже не знаю чем помочь. При отсутствующем Outlook у меня немного другой код ошибки, а специально ставить эту хрень лень.
    В справке написано:  
    Цитата:
    Supported Version
    The OutlookEX UDF has been tested with Outlook 2002 on Windows XP SP3 and Outlook 2010 on Windows 7 SP1.

    Возможно в этом причина?
    Ещё как вариант: имеет значение язык Windows\Outlook?
     
     
    тут решили проблему: OutlookEX UDF - Help & Support

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 13:41 17-07-2013 | Исправлено: ynbIpb, 14:30 17-07-2013
    araneon



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    спасибо за подсказки, решили проблему вместе с water, мешали офис 2003 и Share Point Designer 2007, кто конкретно не знаю, удалил обоих и всё заработало.
    Спасибо!!!
    Вопрос теперь немного другой
    Нужно, создать форму в которой пользователь вводит текст и нажимает кнопочку Отправить.
    Данный текст (который написал пользователь) берётся с этой формы и отправляется на один Email (test@domen.ru) и всё.

    Всего записей: 156 | Зарегистр. 18-07-2008 | Отправлено: 15:42 17-07-2013
    Artem_Butenko



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, прошу Вашей помощи. В редакторе Koda составил следующую форму. Пожалуйста, помогите реализовать следующее действие: при выборе определенной радио-кнопки и нажатию на кнопку "Start", должно выполняться действие соответствующее указанной радио-кнопке. Если выбор вообще не осуществлен, а кнопка "Start" нажата, необходимо вывести предупреждающее сообщение о том, что необходимо осуществить выбор. И можно ли на одну радио-кнопку назначить порядок определенных действий, например, запуск приложения, запись в системный реестр и др. Сам только начинаю учиться работать с GUI в AutoIt. Буду очень Вам признателен за помощь.

    Всего записей: 711 | Зарегистр. 19-02-2008 | Отправлено: 21:30 17-07-2013 | Исправлено: Artem_Butenko, 21:32 17-07-2013
    araneon



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребят подскажите чёт никак не вспомнить
    есть форма на которой есть GUICtrlCreateInput и неактивная кнопка GUICtrlCreateButton  
    в GUICtrlCreateInput нужно в весть только 4 цифры  
    затем нажимая на кнопку (GUICtrlCreateButton) должна производится проверка на правильность ввода цифр, их может быть ТОЛЬКО 4 и должны начинаться на 3
     
    Добавлено:

    Цитата:
    Artem_Butenko

    посмотри здесь

    Всего записей: 156 | Зарегистр. 18-07-2008 | Отправлено: 14:43 18-07-2013 | Исправлено: araneon, 15:21 18-07-2013
    ynbIpb



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

    Код:
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
     
    $Form1 = GUICreate("Form1", 189, 152, 192, 124)
    $Input1 = GUICtrlCreateInput("Input1", 32, 16, 121, 21)
    $Button1 = GUICtrlCreateButton("Button1", 48, 64, 75, 25)
    GUISetState(@SW_SHOW)
     
     
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $Button1
                _check_input()
        EndSwitch
    WEnd
     
    Func _check_input()
        $sInputTxt = GUICtrlRead ($Input1)
        If $sInputTxt = "" Then
            MsgBox (0, "", "Нет текста!")
            Return
        EndIf
        If StringLen ($sInputTxt)  <> 4 Or StringLeft ($sInputTxt, 1) <> "3" Or StringIsDigit ($sInputTxt) = 0 Then
            MsgBox (0, "", "Неверные данные!")
            Return
        EndIf
            MsgBox (0, "", "Всё ОК!")
    EndFunc

     
    madmasles, упс... точно, поправил. С регулярками не дружу, по этому выбрал такой подход.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 16:10 18-07-2013 | Исправлено: ynbIpb, 19:33 18-07-2013
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Artem_Butenko,
    Можно примерно так: Подробнее...
    Но, ИМХО, так проще: Подробнее...
     
    Добавлено:
    ynbIpb
    Цитата:
    araneon, Как-то так:
    У Вас проходит, например, "3абв", вместо 4-х цифр.
     
     
    Добавлено:
    araneon,
    Посмотрите GUICtrlRegExpRestrict - Ограничение элементов ввода рег. выражением (рег.выр. типа '^3\d{0,3}$')

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 16:14 18-07-2013 | Исправлено: madmasles, 16:25 18-07-2013
    dialmak



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    All
    Исходные данные:
    Читаю симлинк бутового раздела HKLM\System\Setup\SystemPаrtition
    Получаю что то типа \Device\HardDiskVolume4
    Нужно:
    1. Определить принадлежность этого раздела \Device\HardDiskVolume4 к номеру диска (типа \Device\Harddisk0, \Device\Harddisk1 и т.д.)
    2. Определить все логические тома данного диска (типа C:, D: и т.д.), определённого в п.1
    Желательно без привлечения WMI
    Есть идеи?

    Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 00:22 19-07-2013
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dialmak
    Тебе нужен _WinAPIEx.au3, пример из его хелпа:
     

    Код:
    #Include <WinAPIEx.au3>
     
    Opt('MustDeclareVars', 1)
     
    Global $Data, $Drive = DriveGetDrive('FIXED')
    Global $List[10]
     
    For $i = 0 To UBound($Drive) - 1
        $List[$i] = ''
    Next
    If IsArray($Drive) Then
        For $i = 1 To $Drive[0]
            $Data = _WinAPI_GetDriveNumber($Drive[$i])
            If IsArray($Data) Then
                $List[$Data[1]] &= StringUpper($Drive[$i]) & ' '
            EndIf
        Next
    EndIf
    For $i = 0 To UBound($Drive) - 1
        If $List[$i] Then
            ConsoleWrite('Drive' & $i & ' => ' & $List[$i] & @CR)
        EndIf
    Next  
     

     
     
     
    Добавлено:
    Твоя задача

    Код:
    #include <WinAPIEx.au3>
     
    $sSystemPartition = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\Setup', 'SystemPartition')
    $iSystemPartition = StringRegExp($sSystemPartition, '\\Device\\HarddiskVolume([1-9]+)', '\1')-1
    $aDrive = DriveGetDrive('FIXED')
    $sList = ''
    If IsArray($aDrive) Then
        For $i = 1 To $aDrive[0]
            $aData = _WinAPI_GetDriveNumber($aDrive[$i])
            If IsArray($aData) Then
                If $aData[1] = $iSystemPartition Then
                    $sList &= $aDrive[$i] & '  '
                EndIf
            EndIf
        Next
    EndIf
    MsgBox(4096, 'Буковки диска  ' & $iSystemPartition, $sList)

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 02:35 19-07-2013
    dialmak



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Вав
    Спс, завтра проверю.
     
    Я тут вроде нашёл ещё метод определения бутовой и системной патриции (или системной и загрузочной, как принято называть у MS)
     
    HKLM\System\CurrentControlSet\Control FirmwareBootDevice  
    результат multi(0)disk(0)rdisk(0)partition(1)  это бутовая с загрузчиком
    HKLM\System\CurrentControlSet\Control SystemBootDevice  
    результат multi(0)disk(0)rdisk(0)partition(4)  это системная с ядром
    Диск видно в rdisk(n)
    Вот только не могу найти доки, чтобы убедиться в правильности предположения...
     

    Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 04:01 19-07-2013 | Исправлено: dialmak, 04:02 19-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