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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skifoff2
    хотя бы так
     
    Alt+9 - вызов меню.

    Всего записей: 85 | Зарегистр. 27-01-2016 | Отправлено: 04:39 25-08-2016
    Skifoff2

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AZJIO2
    Спасибо, не сообразил, что окно нужно создать в любом случае. А зачем и $hHide, и$hGui?

    Всего записей: 121 | Зарегистр. 20-07-2016 | Отправлено: 13:54 25-08-2016
    AZJIO2

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

    Цитата:
    А зачем и $hHide
    Чтобы на панели задач не было кнопки окна.

    Всего записей: 85 | Зарегистр. 27-01-2016 | Отправлено: 14:27 25-08-2016
    AlexM2222



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте! Появился ещё вопрос. Решил сделать себе GUI меню для предварительной настройки установки Windows 7(концепция  конечно не моя, а заимствована из ранних сборок Windows 7 от SmokieBlahBlah и упрощена до немогу...).  
    Суть меню заключается в замене своих параметров в unattend.xml

     
    Сам скрипт..
     
    Unattend.xml
     
    Ссылка на libiconv  https://yadi.sk/d/IZxhI5kcuXgHv
     
    Вопрос - как прописать в скрипте замену в unattend.xml вот этого параметра на $displayname

    Заранее Спасибо!  

    Всего записей: 116 | Зарегистр. 05-09-2010 | Отправлено: 18:48 27-08-2016 | Исправлено: AlexM2222, 19:30 27-08-2016
    Skifoff2

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AlexM2222
    Почему бы не сделать замену регекспом? Строка вроде уникальна.
     
    А зачем вы запускаете UTF-8_BOM.cmd?

    Всего записей: 121 | Зарегистр. 20-07-2016 | Отправлено: 21:19 27-08-2016
    AlexM2222



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skifoff2, а можно с примером...
     
    UTF-8_BOM.cmd запускает утилиту libiconv, которая конвертирует файл Unattend.xml в кодировку UTF-8, которая сбрасывается в 1251 при редактировании...

    Всего записей: 116 | Зарегистр. 05-09-2010 | Отправлено: 07:19 28-08-2016
    ynbIpb



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

    Цитата:
    которая сбрасывается в 1251 при редактировании...  

    Справку то хоть читали?
    доп параметр: 128 = Использовать кодировку Unicode UTF8 (с BOM) для чтения и записи.  

    Код:
    $hfile = FileOpen($opath & "\" & $xmlname, 0+128)
    $hfile = FileOpen($opath & "\" & $xmlname, 2+128)

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 09:47 28-08-2016 | Исправлено: ynbIpb, 09:50 28-08-2016
    Skifoff2

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ynbIpb
    А почему с BOM? Это же вроде XML с encoding="utf-8"?
     
    AlexM2222
    Если я вас правильно понял:

    Код:
    $stext = StringRegExpReplace($stext, '(<CommandLine>net localgroups Пользователи )(.+)( /delete</CommandLine>)', '\1' & StringStripWS(GUICtrlRead($displayname), 3) & '\3', 1)

    Всего записей: 121 | Зарегистр. 20-07-2016 | Отправлено: 11:09 28-08-2016
    ynbIpb



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skifoff2, ну в названии UTF-8_BOM.cmd увидел, вот и показал пример с бом. Но смысл главное понятен, разберётся.

    Всего записей: 1645 | Зарегистр. 01-05-2006 | Отправлено: 19:56 28-08-2016 | Исправлено: ynbIpb, 19:56 28-08-2016
    Skifoff2

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ynbIpb
    Прошу прощения, вопрос был не вам
     
    Занятно, что беглый гуглопоиск ничего про BOM на серверах MS (technet.microsoft.com или как его там) не выдаёт. По идее, кодировка в  XML объявлена, в BOM нет нужды. (Наверное, в крайнем случае можно посмотреть OOBE.xml в Windоws AIK или любые xml-файлы в wim.)

    Всего записей: 121 | Зарегистр. 20-07-2016 | Отправлено: 20:25 28-08-2016
    AlexM2222



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ynbIpb и Skifoff2 спасибо за подсказки!
    Skifoff2,

    Цитата:
    Если я вас правильно понял:

    Всё работает, но почему-то в $displayname обрезает четыре первые буквы. Ввожу слово Электрик, а прописывается трик . Это происходит при запуске из SciTE, при запуске двойным кликом по скрипту - всё отлично

    Код:
    <CommandLine>net localgroups Пользователи трик /delete</CommandLine>


    Всего записей: 116 | Зарегистр. 05-09-2010 | Отправлено: 21:15 28-08-2016 | Исправлено: AlexM2222, 22:42 28-08-2016
    Skifoff2

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AlexM2222
    У вас $displayname читается ещё в строке

    Код:
    replace("DisplayName", StringStripWS(GUICtrlRead($displayname), 3))

    там тоже обрезается?

    Всего записей: 121 | Зарегистр. 20-07-2016 | Отправлено: 23:50 28-08-2016 | Исправлено: Skifoff2, 23:50 28-08-2016
    nik4z



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

    Цитата:
     Это происходит при запуске из SciTE

    Есть там такой баг.
    Для исправления :
     
    Откройте AutoIt3Wrapper.au3, найдите там фрагмент кода

    Код:
    ; Retrieve the compiler settings from the scriptfile when available
    Func Retrieve_PreProcessor_Info()
        Local $I_Rec
        Local $In_File
        Local $hTest_UTF = FileOpen($ScriptFile_In, 16)
        Local $Test_UTF = FileRead($hTest_UTF, 4)
        Local $i_Rec_Param, $i_Rec_Value, $Temp_Val
        FileClose($hTest_UTF)
    ;~ 00 00 FE FF UTF-32, big-endian
    ;~ FF FE 00 00 UTF-32, little-endian
    ;~ FE FF UTF-16, big-endian
    ;~ FF FE UTF-16, little-endian
    ;~ EF BB BF UTF-8
        Select
            Case BinaryMid($Test_UTF, 1, 4) = '0x0000FEFF' ; UTF-32 BE
                $UTFtype = '32BE'
                $SrceUnicodeFlag = 0
                $InputFileIsUTF32 = 1
            Case BinaryMid($Test_UTF, 1, 4) = '0xFFFE0000' ; UTF-32 LE
                $UTFtype = '32LE'
                $SrceUnicodeFlag = 0
                $InputFileIsUTF32 = 1
            Case BinaryMid($Test_UTF, 1, 2) = '0xFEFF' ; UTF-16 BE
                $UTFtype = '16BE'
                $SrceUnicodeFlag = 64
                $InputFileIsUTF16 = 1
            Case BinaryMid($Test_UTF, 1, 2) = '0xFFFE' ; UTF-16 LE
                $UTFtype = '16LE'
                $SrceUnicodeFlag = 32
                $InputFileIsUTF16 = 1
            Case BinaryMid($Test_UTF, 1, 3) = '0xEFBBBF' ; UTF-8
                $UTFtype = '8'
                $SrceUnicodeFlag = 128
                $InputFileIsUTF8 = 1
            Case Else
                $UTFtype = ''
    ;           $SrceUnicodeFlag = 0   ; ошибка в версии 3.3.14  должно быть
                $SrceUnicodeFlag = 512
                $InputFileIsUTF8 = 0
                $InputFileIsUTF16 = 0
                $InputFileIsUTF32 = 0
        EndSelect

    и внесите исправление.
     

    Всего записей: 218 | Зарегистр. 08-11-2015 | Отправлено: 00:23 29-08-2016 | Исправлено: nik4z, 00:24 29-08-2016
    AlexM2222



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

    Цитата:
    там тоже обрезается?

    там всё нормально!
    nik4z

    Цитата:
    Откройте AutoIt3Wrapper.au3, найдите там фрагмент кода


    Цитата:
    и внесите исправление.  

    не помогло  
    Использую SciTE скачаный отсюда https://www.autoitscript.com/cgi-bin/getfile.pl?../autoit3/scite/download/SciTE4AutoIt3_Portable.zip
    баг также проявляется в конвертированом ехе-файле (х64)...
     
     

    Всего записей: 116 | Зарегистр. 05-09-2010 | Отправлено: 20:07 29-08-2016 | Исправлено: AlexM2222, 20:39 29-08-2016
    Skifoff2

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AlexM2222
    Вы не проверяли, в какой момент происходит обрезка?

    Всего записей: 121 | Зарегистр. 20-07-2016 | Отправлено: 22:20 29-08-2016
    nik4z



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AlexM2222
    Могу порекомендовать писать скрипты, использующие кириллицу в кодировке utf8 с bom, в них проблем не возникает.

    Всего записей: 218 | Зарегистр. 08-11-2015 | Отправлено: 05:46 30-08-2016
    AlexM2222



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

    Цитата:
    Вы не проверяли, в какой момент происходит обрезка?

    Обрезается только после вставки этого кода, также обрезается при запуске конвертированного ехе-файла (х64)  

    Код:
    $stext = StringRegExpReplace($stext, '(<CommandLine>net localgroups Пользователи )(.+)( /delete</CommandLine>)', '\1' & StringStripWS(GUICtrlRead($displayname), 3) & '\3', 1)

    Если не сложно посмотрите - может что сделано не так(Первые пробы)  
    здесь полный комплект https://yadi.sk/d/tU4TwSPRuc72N

    Всего записей: 116 | Зарегистр. 05-09-2010 | Отправлено: 18:13 30-08-2016
    nik4z



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AlexM2222
    По всей видимости, это проблема с конвертацией - начало слова Электрик воспринимается как сигнатура.
    Порпробуйте так

    Код:
    Func go()
    .............
        replace("JoinWorkgroup", StringStripWS(GUICtrlRead($workgroup), 3))
        $hfile = FileOpen($opath & "\" & $xmlname, 2 + 128) ;вывод в utf8 with bom  
        $stext = FileWrite($hfile, $stext)
        FileClose($hfile)
    ;    RunWait(@ComSpec & " /c " & $libiconvpath & "\UTF-8_BOM.cmd" & $opath, "", @SW_HIDE, 2) ; не нужна, уже все преобразовано
        #cs
        RunWait("x:\setup.exe /unattend:" & $opath & "\Unattend.xml")
        #ce
        GUISetState(@SW_SHOW, $Form1)
        Exit
    EndFunc
     


    Всего записей: 218 | Зарегистр. 08-11-2015 | Отправлено: 19:35 30-08-2016
    AlexM2222



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

    Цитата:
    Порпробуйте так  


    Код:
    Func go()
        GUISetState(@SW_HIDE, $form1)
        FileCopy($ipath & "\" & $xmlname, $opath, 9)
        $hfile = FileOpen($opath & "\" & $xmlname, 0 + 128) ;чтение в utf8 with bom
    .............  
        $stext = StringRegExpReplace($stext, "(<CommandLine>net localgroups Пользователи )""(.+)""( /delete</CommandLine>)", "\1" & StringStripWS(GUICtrlRead($displayname), 3) & "\3", 1)
        replace("ComputerName", GUICtrlRead($compname))
        replace("JoinWorkgroup", StringStripWS(GUICtrlRead($workgroup), 3))
        $hfile = FileOpen($opath & "\" & $xmlname, 2 + 128) ;вывод в utf8 with bom
        $stext = FileWrite($hfile, $stext)
        FileClose($hfile)
        #cs
        RunWait(@ComSpec & " /c " & $libiconvpath & "\UTF-8_BOM.cmd" & $opath, "", @SW_HIDE, 2) ; не нужна, уже все преобразовано
        RunWait("x:\setup.exe /unattend:" & $opath & "\Unattend.xml") ; раскомментировать после тестов
        #ce
        GUISetState(@SW_SHOW, $Form1)
        Exit
    EndFunc

    не помогло, делал и так и сяк, голова уже кипит...  

    Всего записей: 116 | Зарегистр. 05-09-2010 | Отправлено: 19:48 30-08-2016 | Исправлено: AlexM2222, 20:02 30-08-2016
    Skifoff2

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

    Цитата:
    Обрезается только после вставки этого кода, также обрезается при запуске конвертированного ехе-файла (х64)

    Вы это уже говорили Если вставить

    Код:
    MsgBox(4096, 'Test', StringStripWS(GUICtrlRead($displayname), 3))

    то покажет нормальный необрезаный текст? Т.е. косяк до StringRegExpReplace() или после?
     
    P.S. Вообще, я из тех, кто считает, что особого смысла обновляться выше 3.3.12.0 нет.
     
    Добавлено:
    Зачем эти кавычки

    Код:
    $stext = StringRegExpReplace($stext, "(<CommandLine>net localgroups Пользователи )""(.+)""( /delete</CommandLine>)", "\1" & StringStripWS(GUICtrlRead($displayname), 3) & "\3", 1)

    ?
     
    Добавлено:
    Хм... StringRegExpReplace() в 3.3.14.2 х64 отрезает в начале четыре символа, 3.3.12.0 - только один, а вот 3.3.8.1 совсем не чудит.
     
    Добавлено:
    Попробуйте так, в лоб:

    Код:
    $stext = StringRegExpReplace($stext, '<CommandLine>net localgroups Пользователи .+ /delete</CommandLine>', '<CommandLine>net localgroups Пользователи ' & StringStripWS(GUICtrlRead($displayname), 3) & ' /delete</CommandLine>', 1)

    Вроде срабатывает.

    Всего записей: 121 | Зарегистр. 20-07-2016 | Отправлено: 22:54 30-08-2016 | Исправлено: Skifoff2, 23:52 30-08-2016
       

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