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

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



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ, а как правильно настроить шрифт для текста в GUI? Имею ввиду, что если делаю размер шрифта  с прямым указанием размера, например так

    Код:
    GUISetFont(8.5, 400, 0, $font)

    то после смены масштаба шрифта в ОС (например ставлю 150%) - надписи в GUI не влезают естественно.
    А как же задать шрифт в абсолютных единицах?
    Или может есть и другие способы решения?

    Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 13:44 01-09-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно выставить по умолчанию "-1", если важны другие параметры. Можно получить текущий DPI и на основе этого выставить шрифт.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 20:21 01-09-2013
    dialmak



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO
    DPI это прекрасная мысль.
    Нашёл в 2 местах, через реестр "HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics"   AppliedDPI и через _GDIPlus_ImageGetHorizontalResolution/ _GDIPlus_ImageGetVerticalResolution
    Не очень понимаю какой лучше использовать для привязки к размеру шрифта? И почему есть 2 вида Horizontal и Vertical?

    Всего записей: 14007 | Зарегистр. 27-04-2013 | Отправлено: 11:25 02-09-2013
    Unc1e

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Товарищи, снова к Вам за помощью. При нажатии на ссылку в IE всплывает MsgBox. Его нужно закрыть и затем страницу тоже закрыть. Проблема в том, что внутри скрипта не хотят работать WinExists и WinClose которые должны выполнять описанные выше действия. Если же их поместить в отдельный au3-файл, то все работает как надо. Подскажите в чем дело и как это побороть?

    Всего записей: 434 | Зарегистр. 11-06-2007 | Отправлено: 21:38 04-09-2013
    AZJIO



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

    Цитата:
    Добавлен и переведён wimgapi - UDF для работы с wim-файлами (все 25 функций, 9 примеров).
    Обновлён FileOperations v1.8.2 от 2013.09.04
    Поправка _IniVirtual_Initial, обновлены IniVirtual.au3 и IniVirtualSPE.au3
    Улучшение примера WM_DROPFILES

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 23:10 04-09-2013 | Исправлено: AZJIO, 23:12 04-09-2013
    Unc1e

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Попробую подробнее проблему описать. На странице ищу ссылку и нажимаю
    Код:
    For $oLink In $oLinks
            Local $sLinkText = _IEPropertyGet($oLink, "innerText")
             If StringInStr($sLinkText, $sMyString) Then  
                _IEAction($oLink, "click")  
                ExitLoop  
             EndIf
          Next
    Но в некоторых случаях после нажатия вместо перехода по ссылке всплывает сообщение и останавливает выполнение скрипта. Это сообщение нужно закрыть, затем и страницу закрыть. Пробовал в разные места вставлять такое условие
    Код:
    If WinExists("Сообщение с веб-страницы", "Пользователь запретил приём личных сообщений") Then
       WinClose("Сообщение с веб-страницы", "Пользователь запретил приём личных сообщений")
       _IEQuit($oIE)
    EndIf
    но сообщение так и висит. Если это же условие сохранить в отдельный au3 и запустить после появления сообщения, то сообщение и страница закрываются. Подскажите направление куда копать?

    Всего записей: 434 | Зарегистр. 11-06-2007 | Отправлено: 18:02 07-09-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Unc1e
    Значит надо найти, где повисает скрипт. Включить режим отладки TrayIconDebug, чтобы видеть строку, где повис.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 23:07 07-09-2013
    inile

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

    Всего записей: 1932 | Зарегистр. 29-06-2011 | Отправлено: 17:36 10-09-2013
    AZJIO



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

    Код:
    $Voice = ObjCreate("Sapi.SpVoice")  
    $Voice.Speak (@hour & @min)

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 00:02 11-09-2013
    G8888

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А почему этот кусочек кода двигает сам SciTE ?
     
    Local $hWnd, $iX = 70, $iY = 700
    WinMove($hWnd, '', $iX, $iY)

    Всего записей: 14 | Зарегистр. 29-01-2012 | Отправлено: 09:58 11-09-2013 | Исправлено: G8888, 10:01 11-09-2013
    inile

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

    Всего записей: 1932 | Зарегистр. 29-06-2011 | Отправлено: 11:38 11-09-2013 | Исправлено: inile, 12:39 13-09-2013
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    comrades, подскажите, пожалуйста: делаю что-то вроде прокладки для лаунчеров (типа PStart и Quick Cliq) с возможностью выбрать обычный запуск и с запросом прав администратора, получилось так, нет ли варианта получше?

    Всего записей: 6489 | Зарегистр. 28-01-2008 | Отправлено: 03:58 13-09-2013 | Исправлено: Skif_off, 03:59 13-09-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    У меня снова появилась необходимость использовать ваш принцип поиска файлов, то есть не весь список сразу, а с возможностью например приостановить поиск и в дальнейшем продолжить. Или случай, когда во время поиска найден нужный файл (по содержимому) и нет необходимости продолжать. Обычно первый запрос поиска формирует кэш и это происходит длительно, даже если поиск файлов происходит за 5 сек, то первый запрос может происходить с минуту и более, поэтому ваш принцип всё же имеет место быть полезым. Есть аналог с функцией обратного вызова, но мне не нравится такой подход из-за проблем обфускации с функций "Call".
    По поводу модернизации:
    1. Функция позиционируется как ; AutoIt Version : 3.2.3++, тогда строка

    Код:
    If StringInStr(FileGetAttrib($avStack[$avStack[0] + 3] & "\" & $sFindFile), "D") > 0 Then

    можно заменить на

    Код:
    If @extended Then

    2. Массив $avStack использует сдвиг на 5. Не проще ли сделать 2D-массив $avStack[1][5], тогда на придётся суммировать индекс для смещения.
    3. Массив $avStack постоянно использует ReDim. А есть ли смысл в этом, не проще ли создать массив $avStack[123][5] на 123 элемента - максимальная вложенность каталогов, а в качестве текущей позиции использовать индекс. То есть данные могут быть заполнены до 10 элементов массива, но если я поднялся на 2 уровня вверх я просто использую предыдущий индекс 8, а выше уже просто пустышки, которые могут быть переписаны последующими вызовами погружения во вложенные каталоги.
    4. Пока не пойму почему шаг данных 5, а не 2, ведь маску и другие входные данные можно хранить в первых ячейках массива, например первые 3 индекса забронировать на входные данные, а с 4-го и выше - хранение декскриптора и пути. Как только счётчик индекса стал меньше минимального (4), то поиск завершён.  
     
    Вот первый пример модернизации http://pastebin.com/v1CsLhKZ

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 04:45 13-09-2013 | Исправлено: AZJIO, 08:08 13-09-2013
    NIKZZZZ



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

    Цитата:
    По поводу модернизауии:

    По первому пункту полностью согласен.
    По второму - вообще-то тогда желателен массив 2D-массив $avStack[1][2], что тоже не совсем удобно, а по поводу ReDim - зачем хранить мусор ?
    4 -  шаг данных именно 2, откуда взял 5 ?

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 09:16 13-09-2013
    AZJIO



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

    Цитата:
    а по поводу ReDim - зачем хранить мусор ?
    Ну там в среднем тусуется 2 кб, а ReDim просто дополнительная нагрузка. Функция при обсчёте 10 каталогов просто 10 раз перепишет эти данные, а мы к ним ещё ReDim добавляем. Может для небольшого массива это не критично, надо тестить, чтобы определить разницу.

    Цитата:
    4 -  шаг данных именно 2, откуда взял 5 ?  
    Значит ошибся.
     
    Там был флаг папок, но почему для возврата папок не используется маска?
    Насчёт BitAND я сделал пока обычное приравнивание флагов как в _FileListToArray
     
    Там есть SetError(0), но после неё вызываются функции, по идее @error будет определятся последней вызванной функцией.
     
    Я по ссылке выше обновил полностью переработав, как я хотел.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 11:09 13-09-2013
    ndch

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

    Код:
    $hWnd = WinWait("[CLASS:Front]", "", 1)
    ControlSend($hWnd, 35222, 123, 0);
     

    запускаю скриптик - никакой реакции.
     
    Я видимо чего-то не так делаю. Подскажите что я делаю не так и как делать правильно ?
    Или по-другому: как из autoit послать сообщение ?

    Всего записей: 6521 | Зарегистр. 31-08-2008 | Отправлено: 12:55 15-09-2013 | Исправлено: ndch, 14:32 15-09-2013
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ndch, Вы используете не ту команду.
    Думаю нужна эта:
     

    Код:
    #include <SendMessage.au3>
    _SendMessage($hWnd, $iMsg [, $wParam = 0 [, $lParam = 0 [, $iReturn = 0 [, $wParamType = "wparam" [, $lParamType = "lparam" [, $sReturnType = "lparam"]]]]]])

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 13:30 15-09-2013
    ndch

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ynbIpb
    Спасибо, помогло.

    Всего записей: 6521 | Зарегистр. 31-08-2008 | Отправлено: 13:51 15-09-2013
    yozhic



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте. Объясните, пожалуйста. Видимо у меня неправильное представление сформировалось по аналогии с командой goto. Есть GUI, помещённый в функцию __BrowseDialog и есть кусочек кода:

    Код:
    If $iMode = 4 Then
        $sSourceDir = FileSelectFolder("Please select the source directory containing the dsl files", "", 4, @MyDocumentsDir)
        If @error Then __BrowseDialog
        $sSourceDir &= "\"
    EndIf

    Замысел был такой: вызываем диалог выбора папки, если нажимаем Cancel, то запускается GUI __BrowseDialog, а строчка кода следующая за вызовом __BrowseDialog не отрабатывается, поскольку сценарий «пошёл по другому пути». Но так не получается. А получается что одновременно и GUI запускается и код, следующий за его вызовом, начинает отрабатывать. Почему?  

    Всего записей: 2773 | Зарегистр. 20-03-2008 | Отправлено: 11:12 16-09-2013 | Исправлено: yozhic, 11:21 16-09-2013
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yozhic
    1. Функция __BrowseDialog наверняка должна завершиться скобками?  
    2. После выполнения __BrowseDialog происходит возвращение в точку вызова. То есть не может происходить 2 параллельные ветви скрипта. Обрабатывается ВСЕГДА одна ветвь скрипта. Она может прерваться прерывающими функциями или параллельно выполнить сторонний скрипт или exe-файл, но обрабатывается всегда одна ветвь.

    Всего записей: 4413 | Зарегистр. 03-05-2006 | Отправлено: 11:46 16-09-2013 | Исправлено: AZJIO, 11:55 16-09-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