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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста, как сделать, чтобы при запуске скрипта, изменялась буква системного диска C:\, (на реальную для установленной ОС), в текстовой строке С:\User поля окна.
    (Грубо говоря, чтобы как будто в этой строке работала переменная %Systemdrive%)
    Скрипт начинаю так :

    Код:
    Run('Script.exe')
    WinWaitActive("[CLASS:#32770]")
    ControlFocus ( '[CLASS:#32770]', '', '[CLASS:Edit; INSTANCE:2]' )
    А вот что далее ?...
     
     

    Всего записей: 4928 | Зарегистр. 21-04-2005 | Отправлено: 11:07 14-09-2010 | Исправлено: MKN, 11:11 14-09-2010
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN, не совсем понятна задача в целом.
    но определить системный диск вот:

    Код:
    $sSysDrive = StringMid (@SystemDir, 1, 2)
    Msgbox (0, "", "Так - " & @HomeDrive & @CRLF &"Или так - " & $sSysDrive)

    Использовать макрос @HomeDrive, который возвращает букву диска, который содержит домашний каталог текущего пользователя.
    Или использвать макрос @SystemDir, который содержить полный путь к системной папке и отделить от него букву диска.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 11:38 14-09-2010 | Исправлено: ynbIpb, 11:43 14-09-2010
    MKN



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ynbIpb
    Спасибо за подсказку. Я плохо разбираюсь в AU скриптах, а потому хотелось бы готового решения...
    Ещё раз о задаче : После запуска Script.exe , путь С:\User прописан в поле окна по умолчанию.
    Нужно , чтобы при запуске ,  в этом пути автоматом изменялась буква диска на системную букву. Вот собственно и всё...

    Всего записей: 4928 | Зарегистр. 21-04-2005 | Отправлено: 11:50 14-09-2010
    jekov



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Дайте ссылки на примеры небольшого,но вполне функц.инсталлятора,а то не нашел в ресурсах.Спасибо!

    Всего записей: 1272 | Зарегистр. 11-09-2005 | Отправлено: 12:28 14-09-2010
    ynbIpb



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

    Код:
    $sSysDrive = StringMid (@SystemDir, 1, 3); отделяем букву диска вместе со слешем
    Run('Script.exe')
    WinWaitActive("[CLASS:#32770]")
    ControlSetText ( '[CLASS:#32770]', '', '[CLASS:Edit; INSTANCE:2]', $sSysDrive & "User")


    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 13:03 14-09-2010
    MKN



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

    Всего записей: 4928 | Зарегистр. 21-04-2005 | Отправлено: 13:30 14-09-2010
    madmasles

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MKN, ynbIpb,
    Наверное, так будет правильнее:
    Код:
    Run('Script.exe')
    $hHandle = WinWaitActive('[CLASS:#32770]')
    $sText = ControlGetText($hHandle, '', '[CLASS:Edit; INSTANCE:2]')
    $sText = StringReplace($sText, StringLeft($sText, 2), @HomeDrive)
    ControlSetText($hHandle, '', '[CLASS:Edit; INSTANCE:2]', $sText)

    WinWaitActive('[CLASS:#32770]') - надо бы еще какие-либо данные добавить.
     
     
    PS
    Если только по классу окна работать, то можно так попробовать:
    Код:
    #include <WinAPIEx.au3>
     
    $bCheck = False
     
    $iPid = Run(@ScriptDir & '\Script.exe')
     
    $hHandle = WinWait('[CLASS:#32770]', 5)
    If Not IsHWnd($hHandle) Then
        If ProcessExists($iPid) Then
            ProcessClose($iPid)
            Exit
        EndIf
    EndIf
    $aListPid = _WinAPI_EnumProcessWindows($iPid)
    If Not IsArray($aListPid) Then
        ProcessClose($iPid)
        Exit
    EndIf
    For $i = 1 To $aListPid[0][0]
        If $aListPid[$i][0] = $hHandle Then
            $bCheck = True
            ExitLoop
        EndIf
    Next
    If Not $bCheck Then
        ProcessClose($iPid)
        Exit
    EndIf
     
    If Not WinActive($hHandle) Then WinActivate($hHandle)
    WinWaitActive($hHandle)
    $sText = ControlGetText($hHandle, '', '[CLASS:Edit; INSTANCE:2]')
    $sText = StringReplace($sText, StringLeft($sText, 2), @HomeDrive)
    ControlSetText($hHandle, '', '[CLASS:Edit; INSTANCE:2]', $sText)
    ;...

    WinAPIEx.au3

    Всего записей: 1277 | Зарегистр. 25-09-2008 | Отправлено: 15:26 14-09-2010 | Исправлено: madmasles, 16:24 14-09-2010
    embrace909



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возможен ли такой шаблон скрипта без иконки?
    1) запись в app.exe hex значения AF по определенному офсету 1234
    2) запуск app.exe
    3) пауза 3 секунды
    4) запись в app.exe (уже используемый) hex значения FA по определенному офсету 1234

    Всего записей: 4486 | Зарегистр. 03-03-2006 | Отправлено: 18:24 14-09-2010 | Исправлено: embrace909, 18:26 14-09-2010
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В запущенный EXE файл мне кажется система не даст писать, ибо он занят. Ту типа нужно с памятью процесса работать.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 19:43 14-09-2010
    embrace909



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну а если переименовывать? Действие разрешенное для открытого эксешника.
    Переименовать оригинальный эксе app в app0
    Переименовать патченый app1в app
    Запустить патченый эксешник app
    Подождать 3 сек
    Переименовать патченый app в app1
    Переименовать оригинальный app0 в app
    Выйти
     
    Добавлено
    А всё разобрался - через справку нашел что для этого нужно знать всего 3 простейшие команды
    FileMove("app.exe.bak", "app.exe")
    Run("app.exe")
    WinWait("app", "", 30)

    Всего записей: 4486 | Зарегистр. 03-03-2006 | Отправлено: 20:15 14-09-2010 | Исправлено: embrace909, 10:51 15-09-2010
    Lovec



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    All
    Можно ли средствами AutoIt получить на файловом сервере список всех открытых файлов и закрыть те, которые надо или все разом?
    Типа как работает досовская команда "net file"...
     
    Добавлено:
    Поторопился с вопросом немного...
    Сам нашел ответ

    Код:
    ; закрываем все открытые по сети файлы на компьютере
    $objConnection = ObjGet("WinNT://" & @ComputerName & "/LanmanServer")
    $colResources = $objConnection.Resources
     
    For $objResource in $colResources
        $colResources.Remove($objResource.Name)
    Next
     
    MsgBox (0, '', 'готово')

    Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 09:04 17-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как привязать к shift+колёсику мыши действие, как бы горячую клавишу. Например при прокрутки колёсика проверить нажатие shift используя GUIRegisterMsg(0x020A , "WM_MOUSEHWHEEL")
    посмотрите примеры 1  2 почему то у меня не работают.
     
    Заработало, скачал отсюда hook.dll

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 10:03 17-09-2010 | Исправлено: AZJIO, 07:11 18-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ну и как пример, ради которого всё это делалось - скрипт регулировки звука колёсиком мыши при нажатой клавише Shift.
    Осталось прикрутить иконку в трей. Кто нибудь знает пример, как bmp-ресурс в виде линейки с 10 картинками читать покадрово.
     
    Пока прикрутил sndico.dll, вот готовая утилита - Volume Control v0.3 с исходником в комплекте.
    Добавил Mute, темы, настройки в ini.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 12:47 17-09-2010 | Исправлено: AZJIO, 03:29 19-09-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обрабатываю выбор пункта в КомбоБоксе с помощью $CBN_SELENDOK. При запуске ГУИ выполняется функция, заполняющая КомбоБокс. При выборе пункта в КомбоБоксе - заполняются объекты Инпут (в соответсвии с выбранным пунктом). Как сделать, чтобы после заполнения Комбобокса автоматически выбирался первый пункт и заполнялись Инпуты?
     
    Добавлено:
    И какой стиль применить, чтобы нельзя было текст в него вписывать?
     
    Добавлено:
    Возможно ли вытянуть ссылки на характеристики каждого процессора с этого сайта в массив? Или хотя бы каким образом?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 19:04 19-09-2010 | Исправлено: Zloy_Gelud, 19:56 19-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    В русской справке в примере для GUICtrlSetData установка параметров комбобокса, третим параметром идёт выбранный пункт, который обязательно должен быть во втором параметре заполнения комбобокса пунктами. А если список заполнен уже, то GUICtrlSetData использовать с двумя параметрами, только тот пункт который нужно выбрать.
     
    Заполнение инпутов делается при старте отдельно тем же GUICtrlSetData, а потом уже взависимости от выбора.
     
    Ссылки можно вытянуть регуляркой. Получи страницу в виде текста и регуляркой обрабатывай. Пример регулярки есть в RegExp

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 20:27 19-09-2010 | Исправлено: AZJIO, 21:54 19-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    madmasles
    я посмотрел скрипт "перемещение окна за само окно", как то мы обсуждали, оказалось, что там GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST') непричём. За всё отвечает параметр $GUI_WS_EX_PARENTDRAG
    GUICtrlCreateLabel("Нажми и тащи!", 70, 35, 170, 40, -1, $GUI_WS_EX_PARENTDRAG)
    к элементу, к которому он добавлен за него происходит перетаскивание. Так что не нужно много #include, оказалось всё очень просто, и я это использовал в Volume Control. Кстати "Volume Control" обновил до версии 0.4.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 03:39 20-09-2010 | Исправлено: AZJIO, 03:40 20-09-2010
    ViSiToR



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AZJIO 03:39 20-09-2010
    Цитата:
    там GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST') непричём

    Причём. Это для перетаскивания окна за любое место, не только за Label.
     
    P.S
    По теме.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 03:56 20-09-2010
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR  
    Ну да, стиль применяется ко всем элементам и $WM_NCHITTEST к тем областям, где пощадь не заполнена элементами, а меня к элементу GUICtrlCreateGraphic не поддерживался $GUI_WS_EX_PARENTDRAG, а $WM_NCHITTEST оказался бесполезным, так как элемент GUICtrlCreateGraphic перекрывает область. В итоге я применил $GUI_WS_EX_PARENTDRAG к лейблу-подложке и таким образом перемещатся стало за любую часть.  
    А в том примере можно как вариант сделать размеры лейбла по размеру окна, а к тексту применить - "центрировать".
    примерно так:

    Код:
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    $h_HWND = GUICreate("", 268, 91, -1, -1, BitOR($WS_POPUP, $WS_CLIPSIBLINGS), $WS_EX_TOPMOST)
    GUISetBkColor(0x0A246A)
    GUICtrlCreateLabel("Нажми и тащи!", 0, 0, 268, 91, BitOR($SS_CENTER, $SS_CENTERIMAGE), $GUI_WS_EX_PARENTDRAG)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xA6CAF0)
    GUICtrlSetCursor(-1, 0)
    GUISetState()
    While 1
    WEnd

     
    Добавлено:
    Вот сайт, на русском языке по сообщениям Windows

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 05:02 20-09-2010 | Исправлено: AZJIO, 05:26 20-09-2010
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    Уж помоги, пожалуйста, с регуляркой, чтобы вытянуть ссылку '/autocatalog/intel/CPU_Intel_Xeon_X5560_6.40_LGA1366_88829.html' из примерно такого куска. Уже который час бьюсь и безрезультатно. А идеально было бы в массив ссылку и название (CPU Intel Xeon X5560     2.8 ГГц/1+8Мб/6.40 ГТ/с LGA1366)
     
    Добавлено:
    Добавляю фоновую картинку с помощью GUICtrlCreatePic, затем уже остальные объекты, но они почему то неактивны. Как можно исправить?
     
    Добавлено:
    Возможно ли Инпутам добавить прозрачность?

    Всего записей: 3266 | Зарегистр. 30-05-2007 | Отправлено: 08:07 20-09-2010 | Исправлено: Zloy_Gelud, 08:17 20-09-2010
    NIKZZZZ



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

    Цитата:
    А идеально было бы в массив ссылку и название (CPU Intel Xeon X5560     2.8 ГГц/1+8Мб/6.40 ГТ/с LGA1366)  

     
    Регулярное выражение:

    Код:
    href="([^"]+)"\s+title='Посмотреть\sописание'>([^<]+)

     
     
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 10:49 20-09-2010
       

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