![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#351 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,926
|
![]()
CMD/BAT: Управляющие последовательности ANSI/ECMA-48
Управляющие последовательности ANSI — символы, встраиваемые в текст, для управления форматом, цветом и другими опциями вывода в текстовом терминале. В Microsoft Windows поддержка управляющих последовательностей ANSI появилась начиная с Windows 10. Для управления выводом текста в консоль используются специальные ESC-коды. Выглядят они так: ESC[<параметры><буква-команда> ESC[ — признак начала управляющей последовательности. ESC — непечатный символ с кодом 27 (U+001B). Набирается посредством Alt+27 или Alt+027, на экране выглядит как вопросик в квадрате или иначе, в зависимости от редактора. <параметры> — цифры (иногда с ; ), указывают режим или количество. <буква-команда> — финализирующий символ, указывающий какое именно действие. Так как набирать непечатный символ ESC не очень удобно, да и скопировать текст с непечатными символами может быть проблематично (допустим, невозможно поделиться кодом на форуме), то можно программно получить префикс для CSI-кодов. Вот код для получения CSI-префикса: Код:
E-Mail: arigato.freelance@gmail.com
|
![]() |
![]() |
![]() |
#352 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,926
|
![]()
Цвет и начертание текста
Список поддерживаемых CSI-кодов: CSI30-37m - цвет текста (палитра 8) 0 - Black 1 - Red 2 - Green 3 - Yellow 4 - Blue 5 - Magenta 6 - Cyan 7 - White CSI90-97m - яркий цвет текста (палитра 8) CSI38;5;0-255m - цвет текста (палитра 256) 0–7: базовые цвета 8–15: яркие 16–231: 6×6×6 RGB-куб 232–255: градации серого CSI38;2;R;G;Bm - RGB-цвет текста R, G, B = 0-255 CSI39m - цвет текста по умолчанию CSI40-47m - цвет фона (палитра 8) CSI100-107m - яркий цвет фона (палитра 8) CSI48;5;0-255m - цвет фона (палитра 256) CSI48;2;R;G;Bm - RGB-цвет фона CSI49m - цвет фона по умолчанию CSI1m - яркий CSI22m - яркий откл. CSI7m - инверсный (негатив) CSI27m - инверсный откл. CSI4m - подчеркнутый CSI24m - подчеркнутый откл. Код CSI53m (надчеркнутый) не поддерживается. Имитация: выводить строкой выше подчеркнутый Код CSI51m (обрамленный) не поддерживается. Имитация: использовать подчеркнутый и вертикальные слеши | Код CSI8m (скрытый) не поддерживается. Имитация: CSI30;40m (черный текст на черном фоне или другие совпадающие цвета). Скрытый текст не виден в консоли, но может быть скопирован в буфер обмена посредством выделения CSI0m - выключение всех атрибутов Комбинирование CSI-коды можно комбинировать через ; Например: Код:
Код:
E-Mail: arigato.freelance@gmail.com
|
![]() |
![]() |
![]() |
#353 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,926
|
![]()
Управление курсором и очисткой
Список поддерживаемых CSI-кодов: CSIH / CSIf - курсор в левый верхний угол CSI#;#H - в строку;колонку (позиция курсора, левый верхний угол - 1;1) CSI#;#f - то же самое (альтернативная форма) CSI#A - вверх # строк CSI#B - вниз # строк CSI#C - вправо # колонок CSI#D - влево # колонок CSI#E - на начало строки, ниже на # CSI#F - на начало строки, выше на # CSI#G - в колонку # CSI#H - в начало строки # CSIs - сохранить позицию курсора CSIu - восстановить позицию курсора CSI6n - выводит текущее положение курсора в формате ^[[n;mR, где n — строка, m — столбец Ответ попадает в буфер ввода. Пока непонятно, как его считать... CSI?25l - скрыть курсор CSI?25h - показать курсор CSI#T - прокрутить экран вверх на # Работает не совсем понятно... CSI#S - прокрутить экран вниз на # CSIJ - очистка экрана (по умолчанию от курсора до конца, аналог CSI0J) CSI1J - очистка экрана от начала экрана до курсора CSI2J - очистка всего экрана Комбинация CSI2J+CSIH - аналог команды CLS CSIK - очистка строки (по умолчанию от курсора до конца, аналог CSI0K) CSI1K - от начала строки до курсора CSI2K - очистка всей строки CSI#L - вставить # пустых строк CSI#M - удалить # строк CSI#P - удалить (со смещением в строке) # символов в текущей строке CSI#X - очистить (без смещения в строке) # символов в текущей строке CSI#d - перемещает курсор вниз на # строк? Демонстрационный пример: Код:
E-Mail: arigato.freelance@gmail.com
Последний раз редактировалось Arigato; 05.09.2025 в 14:28. |
![]() |
![]() |
![]() |
#354 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,926
|
![]()
Применяем CSI-коды в приглашении командной строки
CSI-коды отлично работают в промпте. Вот пример батника, который поменяет цвет приглашения на ярко-желтый: Код:
E-Mail: arigato.freelance@gmail.com
|
![]() |
![]() |
![]() |
#355 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,926
|
![]()
Вывод текста с CSI-кодами из файла
Имеется возможность сохранить текст с управляющими последовательностями ANSI в файл для последующего вывода в консоль командой type. Особенность: CSI-код в файле выглядит таким образом: ESC[, где ESC - непечатный символ с кодом 27 (0x1B). Набирается посредством Alt+27 или Alt+027, на экране выглядит как вопросик в квадрате или иначе, в зависимости от редактора. Файл необходимо сохранять в однобайтовой кодировке OEM 866 для корректного отображения русских букв. Простой пример для демонстрации: Код:
По сути ans-файл это обычный текстовый файл, но с добавлением управляющих последовательностей ANSI. Редактируется в любом блокноте, позволяющим вставлять непечатный символы. Использование расширение .ans лишь информирует о том, что там не плоский текст. А так расширение файла роли не играет. Файл example.ans во вложении (извлечь из архива). E-Mail: arigato.freelance@gmail.com
|
![]() |
![]() |
![]() |
#356 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,926
|
![]()
Скрытый ввод текста (ввод пароля)
Используя CSI-коды можно реализовать скрытый ввод пароля. Следующий код позволяет это сделать: Код:
Код CSI30;40m устанавливает черный цвет текста на черном фоне, в итоге вводимые символы не видны. Код CSI?25l отключает отображение курсора, в итоге не видно и количество вводимых символов. После ввода выполняются следующие CSI-коды: Код CSI1A подымает курсор на одну строку выше (то есть в строку, где только что вводили пароль). Код CSI2K полностью удаляет строку. Это необходимо сделать, так как хоть пароль и не виден (черный на черном), но он остается на экране, от куда может быть скопирован в буфер обмена посредством выделения области экрана. Код CSI0m отменяет черный текст на черном фоне. Код CSI?25h включает отображение курсора. Уязвимости: 1. Пароль выводится на экран черным цветом по черному фону, но фактически он там есть. Удаляется с экрана только после завершения ввода. 2. В переменной %password% сохраняется пароль в открытом виде. Желательно очистить переменную с помощью: set password= 3. Пароль остается в истории ввода. То есть если при следующем запросе ввода нажать стрелку вверх, то на ввод поступи только что введенный пароль. Пока не ясно, как это побороть... 4. Если проверка пароля происходит внутри bat-файла, то изучение исходного кода позволит раскрыть пароль. 5. Также изменение исходного кода позволит просто обойти проверку пароля. Полноценный пример, демонстрирующий авторизацию по паролю: Код:
E-Mail: arigato.freelance@gmail.com
|
![]() |
![]() |
![]() |
#357 | |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,926
|
![]() Цитата:
Код:
Код:
E-Mail: arigato.freelance@gmail.com
|
|
![]() |
![]() |
![]() |
#358 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,926
|
![]()
CMD/BAT: звуки (3 разных + бонус: сигнал SOS)
Два примера, как вывести звук из батника: Код:
Подпрограмма beep1 выводит звук через символ с кодом 7. Подпрограмма beep2 выводит звук через команду choice. Не факт что везде будет работать, не проверял, но у меня оба метода работают и звуки разные. Произвольный звуковой сигнал Еще один вариант воспроизвести звук, причем произвольный: Код:
200 - продолжительность в мс (от 1). Сигнал SOS А вот и пример реализации сигнала SOS через звуки и мигание экраном: Код:
E-Mail: arigato.freelance@gmail.com
Последний раз редактировалось Arigato; 06.09.2025 в 14:40. |
![]() |
![]() |
![]() |
#359 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,926
|
![]()
Имитация сообщения азбукой Морзе:
Код:
E-Mail: arigato.freelance@gmail.com
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Макрос для сохранения листов в отдельных файлах | Neo007 | Microsoft Office Excel | 2 | 22.10.2008 18:16 |
Русская раскладка в bat-файлах | snake-as | Microsoft Office Excel | 3 | 16.10.2008 17:59 |
Сортировка в файлах и записях. Паскаль | Elizabeth Black | Помощь студентам | 2 | 27.05.2008 21:51 |
Помогите с вопросами о файлах | Дима82 | Помощь студентам | 5 | 26.05.2008 19:49 |
Помогите, пожалуйста, решить задачу по файлах | sheva_ser | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 27.03.2008 19:36 |