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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 4)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Открыть новую тему     Написать ответ в эту тему

gyra

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

 
Описание:

Цитата:
AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя эмуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши, управление окнами и их визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны.
Умеет он очень и очень многое! Бесплатный.

 
  • Справки
  • Инструменты
  • Ресурсы, посвящённые AutoIt
  • Полезные советы новичкам и не только
  • Готовые решения
  • Версии для устаревших Windows
  • Скрипт раскраски кода AutoIt для публикации в форумах
     


     
    За шапкой следит ViSiToR / AZJIO  

  • Всего записей: 7932 | Зарегистр. 18-02-2006 | Отправлено: 10:49 23-01-2020 | Исправлено: Egor2020, 14:02 22-03-2021
    iglezz

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

    Цитата:
    Оне "default" выдаёт при отсутствии параметра, а не отсутствии  ключа. А мне при отсутствии ключа надо. Чтоб "обнуление" прописывать в "лишних" в данной конфигурации параметрах не надо было.  


    Цитата:
    И возвращает это в случае отсутствии  строки, а не ключа в строке.  

    ???
    Тут, походу, траблы в терминологии

    Код:
    [секция]
    ключ=значение
     
    [section]
    key=value
     

    IniRead возвращает значение по умолчанию (default value) если отсутствует ключ (key). Отсутствует значение (value) == "" (пустая строка)

    Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 21:48 14-03-2020 | Исправлено: iglezz, 21:49 14-03-2020
    gryu



    дикий гусь
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    iglezz
    Цитата:
    Тут, походу, траблы в терминологии  
    аха.  

    Цитата:
    [секция]
    ключ=значение  

    Неа. Я имел ввиду

    Цитата:
    [секция]
    параметр=ключ (он же "значение")

     

    Всего записей: 13033 | Зарегистр. 15-03-2006 | Отправлено: 21:51 14-03-2020 | Исправлено: gryu, 21:53 14-03-2020
    iglezz

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

    Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 22:00 14-03-2020 | Исправлено: iglezz, 22:00 14-03-2020
    gryu



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

    Цитата:
    ибо параметр=ключ, как минимум, некорректная терминология,
    Спортная точка зрения. Нас так учили на информатике ещё 80-е.  (секция - параметр - значение параметра)
    И в 90-е в "почтовом ящике" она тоже была актуальной.
    Так что возможно где то она устаревшая, но не "некорректная".
    ...
    но это уже нюансы.

    Всего записей: 13033 | Зарегистр. 15-03-2006 | Отправлено: 22:03 14-03-2020 | Исправлено: gryu, 22:07 14-03-2020
    NIKZZZZ



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

    Цитата:
    Если кодировка в UTF8 с BOM, то обязательно нужно в ini файле в начало ini файла добавлять пустую строку, иначе  BOM заголовок будет воспринят как символы, больше проблем не видел.  

    Поясню, сам нарывался на этот баг.
    BOM заголовок - это последовательность из нескольких спецсимволов в начале файла, по которым можно определить его кодировку.
    Умные редакторы\вьюверы эти спецсимволы не отображают.
    Но вот IniRead() в Autoit не поймет такую строку с BOM заголовком UTF8 "п»ї"

    Код:
    п»ї[секция]

     
     
    Добавлено:

    Цитата:
    Тут, походу, траблы в терминологии  

    Это не траблы, а проблемы с переводом с английского, связанная с неоднозначностью понятия "Key"

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:42 14-03-2020
    iglezz

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Теперь понятно, что имелось в виду
    Учитывая, что IniRead/Write в UTF-8 всё равно не умеют по-человечески, мне, при случае, проще будет свою библиотечку написать или воспользоваться готовой.

    Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 23:06 14-03-2020
    NIKZZZZ



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

    Цитата:
    IniRead/Write в UTF-8 всё равно не умеют по-человечески

    Кроме указанного выше бага, проблем не встречал, нормально работает с кириллицей в UTF8, хотя сам пользуюсь своей библиотекой, но по другой причине, например

    Код:
    [секция]
    параметр=значение


    Код:
    [секция]
    параметр="значение"

    отличаются, хотя стандартный вызов IniRead() вернет одинаковый результат, что может привести к ошибке.
    Просто, не хочется сталкиваться с подобными проблемами, поэтому и предпочитаю свою библиотеку.
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 23:39 14-03-2020
    gryu



    дикий гусь
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    То что у IniRead() есть встроенная функция определения сектора вычитывания, это как раз очень хорошо.
    (это как раз о том, что при вычитке определяется что читать по кавычкам в частности)
    Другой вопрос что в некоторых случаях это неудобно.  
    Но в некоторых былоб неудобно, еслиб этого небыло. (Стандартная проблема с пробелами и знаками перевода строки. )

    Всего записей: 13033 | Зарегистр. 15-03-2006 | Отправлено: 14:44 16-03-2020
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gryu
    IniRead() хорошая штука, но иногда ее интеллект приводит к не предсказуемым последствиям.
    Типичный пример - кавычки.
    Я обычно использую свою версию  _IniRead(),  более тупую, но которая вернет мне необработанное значение, а для файла использую расширение .cfg вместо .ini, который я могу читать по своим правилам.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 15:28 16-03-2020
    TVN



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


    Всего записей: 2605 | Зарегистр. 19-09-2003 | Отправлено: 13:05 17-03-2020
    AZJIO



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

    Цитата:
    Нас так учили на информатике ещё 80-е.  (секция - параметр - значение параметра)  


    Цитата:
    Неа. Я имел ввиду
     
    Цитата:
    [секция]
    параметр=ключ (он же "значение")  

    Да но первое не подтверждает второе
     

    Цитата:
    Жаль что описашки функций в инете ущербны.  
    Краткое описание, порой из которого приходится истину добывать методом научно тыка.  
    Я про https://autoit-script.ru/docs/

    Там описание функции AutoIt3, а не описание WinAPI, просто многие знают о том как работает винда с ini, а справка лишь описывает формат функции в плане AutoIt3, иначе спойлеров в справке было бы бесконечное количество, вплоть до описания железа, ведь кто-то бы не понял и это.
     
    Против кракозябров помогает UTF16, тогда не получится запись в одной кодовой странице, а чтение в другой. Либо используй одинаковую кодовую страницу при чтении и записи. Ну а если и UTF16 не поможет, если запишет 866 в UTF16, а читать надо не то что записано в 866, а в 1251, то Encoding UDF (они же есть тут)
     
    NIKZZZZ
    Про UTF8 не знал, что пустая строка помогает, но всё равно не надёжно, стоит пользователю удалить пустую строку и он ни каким краем ума не догадается почему у него перестало работать. Если только не заставить прогу перед обращением к ini-файлу проверять есть ли пустая строка вначале и принудительно её добавлять при отсутствии.
    Потестил UTF8, ini-файл визуально кириллица в кракозябрах, хотя результат чтения функциями нормальный. Он пишет в него как 1251, думаю у иностранца с кодировкой по умолчанию например 1252, это будет также нечитаемо как и анси.
     
    iglezz

    Цитата:
    или с помощью IniVirtual (не проверял)
    я проверял, работает, но на 3.3.8.1. В новых версиях изменён формат регулярных выражений, надо переделывать рег.выр.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 07:44 19-03-2020 | Исправлено: AZJIO, 08:55 19-03-2020
    NIKZZZZ



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

    Цитата:
    Там описание функции AutoIt3, а не описание WinAPI, просто многие знают о том как работает винда с ini,

    Да, они довольно сильно отличаются, это необходимо учитывать.

    Цитата:
    Против кракозябров помогает UTF16

    Родная IniRead() Autoit прекрасно распознает кодировки, даже если нет BOM сигнатуры.

    Цитата:
    Потестил UTF8, ini-файл визуально кириллица в кракозябрах, хотя результат чтения функциями нормальный.  

    Так это проблема редактора.

    Цитата:
    Про UTF8 не знал, что пустая строка помогает, но всё равно не надёжно, стоит пользователю удалить пустую строку и он ни каким краем ума не догадается почему у него перестало работать.  

    Это точно подмечено, сам нарывался.
    Поэтому обычно использую вместо пустой использую строки строку с комментарием, в нем можно так-же указать пользователю, что эту строку удалять нельзя.

    Цитата:
    или с помощью IniVirtual

    Их есть несколько вариантов, imxo, использующие регулярные выражения не слишком надежны.
    Например, на больших ini файлах могут не найти нужный параметр из-за ограничения буфера движка regexp, иногда могут даже зависнуть.
    Скорость работы низкая, да и другие баги могут проявляться, например связанные со спец символами.  
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 04:56 20-03-2020
    AZJIO



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

    Цитата:
    Так это проблема редактора.
    Ну это не может быть проблемой всех редакторов, тем более которых надёжность проверена годами.

     

    Код:
    $sPath_ini = @ScriptDir & "\Example.ini"
     
    ; $hFile = FileOpen($sPath_ini, 32+2)
    ; $hFile = FileOpen($sPath_ini, 256+2)
    $hFile = FileOpen($sPath_ini, 128+2)
     
    If $hFile = -1 Then
        MsgBox(4096, "Ошибка", "Невозможно открыть файл.")
        Exit
    EndIf
     
    FileWrite($hFile, @CRLF)
    FileClose($hFile)
     
    IniWrite($sPath_ini, "Section", "Key", "Это новое значение")
    $sRead = IniRead($sPath_ini, "Section", "Key", "Значение ПО УМОЛЧАНИЮ")
    MsgBox(4096, "", "Значение параметра 'Key' в секции 'Section': " & $sRead)
    IniDelete($sPath_ini, "Section", "Key")
    FileDelete($sPath_ini)

    IniWrite воткнула текст в анси-режиме и прочитала в анси, показывает то нормально в мессаге, но вот в редакторах кракозябры, потому что текст не в UTF-8, а показывает кодировку UTF-8 в строке состояния и естественно пытается отобразить текст как будто это UTF-8, AkelPad взял китайские реальные символы, Notepad++ отобразил код остальные видимо в шрифтах не имеют этих символов и вставлены символы подмены.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 07:07 20-03-2020
    NIKZZZZ



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

    Цитата:
    Ну это не может быть проблемой всех редакторов, тем более которых надёжность проверена годами.

    Определить кодировку файла по его содержимому в принципе не возможно, все "автоопределители" определяют ее только используя методы теории вероятностей.
    Они прекрасно работают на относительно больших текстовых файлах, но на малых могут сильно сбоить, к примеру, могут использовать пароль (бессмысленный набор символов), для определения кодировки.
    Да, и , например в Autoit FileGetEncoding(), имеет параметр, который позволяет определять кодировку на основе либо куска, либо полного анализа файла (медленно).
    Для Autoit дефолтной кодировкой является UTF8 (по моему, начиная с версий старше 3.8, могу ошибаться), поэтому использование UTF8 не вызывает особых проблем.
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 09:17 20-03-2020 | Исправлено: NIKZZZZ, 09:18 20-03-2020
    AZJIO



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

    Цитата:
    Определить кодировку файла по его содержимому в принципе не возможно, все "автоопределители" определяют ее только используя методы теории вероятностей.  

    у нас же метка BOM, с ней определяется только меткой независимо от содержимого.
    Для функций ini проверил в том числе на последней версии AutoIt3.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 16:13 20-03-2020 | Исправлено: AZJIO, 16:15 20-03-2020
    NIKZZZZ



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

    Цитата:
    у нас же метка BOM, с ней определяется только меткой независимо от содержимого.  

    А кто сказал, что это именно метка?
    Я что-же, не могу использовать ANSI файл, который начинается с "п»ї"  или "юа" или другой "меткой"?
    То-есть либо надо указывать самому кодировку при чтении, либо полагаться на теорию вероятностей.
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:31 20-03-2020
    AZJIO



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

    Цитата:
    Я что-же, не могу использовать ANSI файл, который начинается с "п»ї"

    Как я понимаю, да. Если нет метки, то автоопределение. Причём между ANSI и UTF8 сильные различия, при наличии хотя бы одной не латинской буквы, поэтому они легко и точно определяются любым редактором. А уж определение между кодовыми страницами  то это сложнее и здесь да чем меньше текста тем хуже определяется. В AkelPad указывается буфер для определения кодировки.
    Сохрани файл только из латинских символов как ANSI и как UTF8 без BOM и они бинарно будут одинаковыми. А метка BOM "п»ї" заставляет даже такой файл принудительно определять как UTF8 и продолжать набор не латинских букв широкими. Метка всего лишь определяет другим программам, браузеру, IDE и  т.д. как отображать файл, не более и конечно писать туда можно и в ANSI, вот только программы не отобразят этот текст читаемым.
     
    Юникод для ini нужен, чтобы к примеру иностранец с англ языком в ОС при использовании контента мог его перевести с русского на английский или не переводить, но русский текст будет русским, иначе в ANSI русский текст у иностранцев будет состоять из умляутов и он во первых даже не будет знать какой это язык, если только умная прога постарается алгоритмами по частоте встречаемости каких то символов, по исключаемости каких то символов может определить что это кириллица. То есть писать ANSI-данные в UTF8 бессмысленно. А ini-функции пишут в юникоде в UTF16 LE, что я и указал в справке. На англ. форумах постоянно недовольны если файл в ANSI, они не могут прочитать комментарии, а те кто могут не хотят замарачиваться, когда автору всего лишь нужно сохранить в исходник в UTF8 и Описания и ini-файлы. Конкретно у меня в программе TextCorrection ini-файл содержит русский алфавит для преобразований, и UTF16 в ini сразу даёт понимание работы проги.

    Всего записей: 4411 | Зарегистр. 03-05-2006 | Отправлено: 18:30 20-03-2020 | Исправлено: AZJIO, 19:04 20-03-2020
    adapters

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А где есть свежая сборка со всеми плюшками в редакторе ?

    Всего записей: 84 | Зарегистр. 12-08-2011 | Отправлено: 12:19 25-03-2020 | Исправлено: adapters, 12:20 25-03-2020
    Krot66



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    CLCL_AHK - менеджер буфера обмена плюс расширенная обработка текста средствами Autohotkey и AutoIt

    Всего записей: 1202 | Зарегистр. 10-12-2007 | Отправлено: 11:22 30-03-2020
    TVN



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Благодарю, что не дали готовый au3 - разобрался сам.
     
    Как определить ошибку в коде, если в exe 7254? Код сложный и большой, защит и прочего мусора нет.

    Всего записей: 2605 | Зарегистр. 19-09-2003 | Отправлено: 13:07 10-04-2020
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14

    Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 4)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru