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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача данных в консоль, работа с консолью 
:(
    Опции темы
_sten_
  Дата 12.12.2006, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я пытаюся написать оболочку для командной строки 
использовал вот такой код:
Код

procedure TForm1.Button2Click(Sender: TObject);
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  StdOutPipeRead, StdOutPipeWrite: THandle;
  WasOK: Boolean;
  Buffer: array[0..255] of Char;
  BytesRead,BytesWrite: Cardinal;
  workDir,StdInput:string;
  Buf       : pchar;

begin
  Application.ProcessMessages;
  with SA do
  begin
    nLength := SizeOf(SA);
    bInheritHandle := True;
    lpSecurityDescriptor := nil;
  end;
  CreatePipe(StdOutPipeRead,  
             StdOutPipeWrite,
             @SA,             
             0               
             );
  try    
    with SI do
    begin
      FillChar(SI, SizeOf(SI), 0);
      cb := SizeOf(SI);    
      dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;    
      wShowWindow := SW_HIDE;
      hStdInput := GetStdHandle(STD_INPUT_HANDLE); 
      hStdOutput := StdOutPipeWrite;    
      hStdError := StdOutPipeWrite;
    end;
    WorkDir := 'c:\';
    WasOK := CreateProcess(nil, 'C:\WINDOWS\system32\cmd.exe', nil, nil, True, 0, nil, PChar(WorkDir), SI, PI);
    if not WasOK then showmessage('error')
    else
      try
      buf:='dir';
       WasOK:=WriteFile(StdOutPipeWrite, buf, Length(stdInput), BytesWrite, nil); //***************
       if not WasOk then ShowMessage('Can not write');
       CloseHandle(StdOutPipeWrite);
        repeat
          WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
          if BytesRead > 0 then
          begin    
            Buffer[BytesRead] := #0;
            OemToAnsi(Buffer,Buffer);
            memo1.Lines.Add(Buffer);
          end;
        until  not WasOk or (BytesRead = 0);
        WaitForSingleObject(PI.hProcess, INFINITE);
      finally
        CloseHandle(PI.hThread);
        CloseHandle(PI.hProcess);
      end;
  finally
      CloseHandle(StdOutPipeRead);
  end;
end;

но в масте отмеченом *  какаето ошибка и дирекекторию оно не пролистивает smile

Получается я знаю как считать данные с консоли но не знаю как их передать
Подскажите может кто-то с етим работал

ЗЫ:
вариант тапа: WasOK := CreateProcess(nil, 'C:\WINDOWS\system32\cmd.exe /c dir', nil, nil, True, 0, nil, PChar(WorkDir), SI, PI); я знаю но он не подходит smile надо типа в рунтайм


--------------------
WARNING: Condition 'to_be || !to_be' is always 'true' !
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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