Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перенаправление консольного вывода в Memo на форме, Создание своего консольного вывода 
:(
    Опции темы
Vardoulacha
Дата 29.6.2006, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Вообщем вот такая вот тема, опишу проблему:
очень часто пользуюсь командной строкой windows, но мне она многим не нравится
1) нельзя сделать полупрозрачное окно чтобы на рабочем столе поставить
2) нельзя убрать кнопку с TaskBar
3) нет удобной истории использованных команд
4) неудобство копирования выведенной информации
5) хотелось бы выводимые строки прогонять через фильтр чтобы цветами все расскрасить

вообщем вот чтобы это реализовать много ума не надо, все упирается в написание перенаправления вывода консоли в Memo? порывшись в инете нашел следующий пример:

Код

procedure RunDosInMemo(CmdLine:String; AMemo:TMemo);
const
  ReadBuffer = 2400;
var
 Security       : TSecurityAttributes;
 ReadPipe,WritePipe  : THandle;
 start        : TStartUpInfo;
 ProcessInfo     : TProcessInformation;
 Buffer        : Pchar;
 BytesRead      : DWord;
 Apprunning      : DWord;
begin
 Screen.Cursor:=CrHourGlass;
 With Security do begin
 nlength        := SizeOf(TSecurityAttributes);
 binherithandle    := true;
 lpsecuritydescriptor := nil;
 end;
 if Createpipe (ReadPipe, WritePipe,
        @Security, 0) then begin
 Buffer  := AllocMem(ReadBuffer + 1);
 FillChar(Start,Sizeof(Start),#0);
 start.cb      := SizeOf(start);
 start.hStdOutput  := WritePipe;
 start.hStdInput  := ReadPipe;
 start.dwFlags   := STARTF_USESTDHANDLES +
            STARTF_USESHOWWINDOW;
 start.wShowWindow := SW_HIDE;

 if CreateProcess(nil,
     PChar(CmdLine),
     @Security,
     @Security,
     true,
     NORMAL_PRIORITY_CLASS,
     nil,
     nil,
     start,
     ProcessInfo)
 then
 begin
  repeat
  Apprunning := WaitForSingleObject
         (ProcessInfo.hProcess,100);
   ReadFile(ReadPipe,Buffer[0],
      ReadBuffer,BytesRead,nil);
   Buffer[BytesRead]:= #0;
   OemToAnsi(Buffer,Buffer);
   Application.ProcessMessages;
   AMemo.Text := AMemo.text + String(Buffer);

  Application.ProcessMessages;
  until (Apprunning <> WAIT_TIMEOUT);
 end;
 FreeMem(Buffer);
 CloseHandle(ProcessInfo.hProcess);
 CloseHandle(ProcessInfo.hThread);
 CloseHandle(ReadPipe);
 CloseHandle(WritePipe);
 end;
 Screen.Cursor:=CrDefault;
 Form1.edCMD.Clear;
end;


пример использования:
Код

RunDosInMemo('ping 192.168.0.1', Memo1);


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

1) проверял следующие команды
ping 192.168.0.1
ipconfig -all
все работает, но как только ввожу команду
dir - то ничего не происходит вообще smile
а если ввожу команду ipconfig - то программа выводит результат и все успешно зависает smile
2) команда ping 192.168.0.1 нормально выводит русский текст т.к. идет преобразование кода
а вот команда ipconfig -all видно сразу выдает windows-кодировку но преобразование все равно проводится и получается конечно же абракадабра

вот в принципе такой хороший пример и страдает вот такими вот багами, может кто знает как от них избавиться, помогите smile 
PM MAIL   Вверх
Yanis
Дата 29.6.2006, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Эта проблема ещё не решена.  

Это сообщение отредактировал(а) Yanis - 29.6.2006, 08:07


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Vardoulacha
Дата 29.6.2006, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 184
Регистрация: 11.8.2005

Репутация: нет
Всего: 8



Цитата(Yanis @  29.6.2006,  08:04 Найти цитируемый пост)
Эта проблема ещё не решена.  

то есть лучшие умы в курсе этой проблемы и бьются над ее решением???

да кстати интересно кто автор этого кода? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.