IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Консоль, Перенаправление I/O с консоли
сообщение
Сообщение #1


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Перенаправляю ввод\вывод с консоли в безымянные программные каналы (anonymous pipes) - "святая троица" соответственно StdIn, StdOut, StdErr. И показываю всё это добро на текстарии.
Вот ситуация: cmd.exe возвращает свой вывод в OEM-кодировке с псевдографикой, но проблема не в этом, проблема в том, что некоторые программы, запущенные из под cmd-шника выводят в в нормальной кодировке 1251 (или какая там CP). Кроме того, cmd почему-то ДУБЛИРУЕТ input и выбрасывает его в output.
Кто может подсказать, как с этим броться?
Я так думаю, нужно ловить дебаг-событие запуска программы из cmd и в какой-то форме спрашивать пользователя, нужно ли показывать input юзверя в текстарии (или может прога дублирует input в output) а также какую CP использовать для отображения текста - ANSI или OEM.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 69
Пол: Мужской
Реальное имя: Антон

Репутация: -  0  +


Цитата(hardcase @ 27.04.2006 9:30) *

Перенаправляю ввод\вывод с консоли в безымянные программные каналы (anonymous pipes) - "святая троица" соответственно StdIn, StdOut, StdErr. И показываю всё это добро на текстарии.
Вот ситуация: cmd.exe возвращает свой вывод в OEM-кодировке с псевдографикой, но проблема не в этом, проблема в том, что некоторые программы, запущенные из под cmd-шника выводят в в нормальной кодировке 1251 (или какая там CP). Кроме того, cmd почему-то ДУБЛИРУЕТ input и выбрасывает его в output.
Кто может подсказать, как с этим броться?
Я так думаю, нужно ловить дебаг-событие запуска программы из cmd и в какой-то форме спрашивать пользователя, нужно ли показывать input юзверя в текстарии (или может прога дублирует input в output) а также какую CP использовать для отображения текста - ANSI или OEM.

Если честно ничего не понял...Подробнее обьясни..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Так, с дублированием input-a в cmd я разобрался - ключ /q позволяет отключать это безобразие (/q - echo off)

Объясняю подробнее (а чего конкренто не понятно?). Написал программу (вернее это только небольшой кусок большей) которая перенаправляет стандартный ввод/вывод у порождаемого дочернего процесса, коим является cmd.exe. Ввод/вывод отображаю не в текстовом режиме, а в графическом - на текстарии (конкретне - на SynEdit"е - он с OEM дружит и псевдографику отображает). Cmd возвращает результаты своих встроенных команд в OEM кодировке, поэтому я и ставлю OEM_CHARSET на контроле.

Проблемы начинаются когда в cmd запускаются консольные программы, которые возвращают текст (русский) в нормальной кодировке. Если в системном окне консоли они неким волшебным образом отображаются корректно, то у меня абракадарба. Например ipconfig /all возвращает у меня дату выдачи IPшника с названием месяца по русски. В консоли написано - апрель, а в моём контроле - чертечто.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 69
Пол: Мужской
Реальное имя: Антон

Репутация: -  0  +


Вот с этого и надо было начинать что ты написал прогу smile.gif...я так понял проблемы у тя с кодировкой..??попробуй в свойствах программы покопаться там много чего интересного есть...иметься ввиду правой клавишей на екзешник и свойства...smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


почему-то мне кажется, что теме место либо в Теории, либо в Задачах....


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Да, проблемы - с кодировкой. Вернее не совсем с кодировкой.
Мне нужно как-то отличать программы, которые могут выбрасывать в стандартный поток ANSI-символы.
Это можно выяснить анализируя исполняемый файл (язык и т.д.) или придётся спрашивать пользователя?

P.S. Как поймать запуск приложения из cmd - я знаю.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


я вот что думаю... ведь есть же программы (текстовые редакторы), которые сами определяют кодировку....
может тебе стоит копать в эту сторону ?


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


http://denisov.i2x2.ru/delphi/bibl/Algoritm/AutoSelect.htm
здесь есть краткое описание алгоритма...
наверное можно пропустить выходной поток через "фильтр", который будет определять кодировку, преобразовывать в нужную тебе и передавать его дальше.

вот нашел модуль, может пригодится. Прикрепленный файл  xlat.zip ( 1.85 килобайт ) Кол-во скачиваний: 182


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Ооо. Пасиб за ценные ссылки.
Сейчас попробую прикрутить к программе.

>добавлено позже:

Впихнул xlat. Он в принципе работает, но и заменяет символы псевдографики.
Вообщем, я так решил - к чёрту кодировки. Прога и так справляется со всем, что нужно.

Сообщение отредактировано: hardcase -


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 18.12.2017 20:01
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"