Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

Перенаправление параметров вывода.   Найти похожие ветки 

 
Михаил   (2004-03-19 16:31) [0]

Доброе время суток!
Подскажите пожалуйста.
Я запускаю cmd.exe
из своей программы как заставить мою программу получать результат ее работы  Т.е.,допустим, я запускаю командную строку и хочу выполнить команду dir C:\ и получить результат в свою программу.
Заранее благодарю.


 
RA ©   (2004-03-19 19:32) [1]

Вот, однажды встретил такую реализацию Dos2Win v1.00 (aka
TDosMemo) by Manuel Bua:

procedure Dos2Win(CmdLine:String; OutMemo:TMemo);
const BUFSIZE = 2000;
var SecAttr    : TSecurityAttributes;
   hReadPipe,
   hWritePipe : THandle;
   StartupInfo: TStartUpInfo;
   ProcessInfo: TProcessInformation;
   Buffer     : Pchar;
   WaitReason,
   BytesRead  : DWord;
begin

with SecAttr do
begin
  nlength              := SizeOf(TSecurityAttributes);
  binherithandle       := true;
  lpsecuritydescriptor := nil;
end;
// Creazione della pipe
if Createpipe (hReadPipe, hWritePipe, @SecAttr, 0) then
begin
  Buffer  := AllocMem(BUFSIZE + 1);    // Allochiamo un buffer di dimensioni BUFSIZE+1
  FillChar(StartupInfo, Sizeof(StartupInfo), #0);
  StartupInfo.cb          := SizeOf(StartupInfo);
  StartupInfo.hStdOutput  := hWritePipe;
  StartupInfo.hStdInput   := hReadPipe;
  StartupInfo.dwFlags     := STARTF_USESTDHANDLES +
                             STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_HIDE;

  if CreateProcess(nil,
     PChar(CmdLine),
     @SecAttr,
     @SecAttr,
     true,
     NORMAL_PRIORITY_CLASS,
     nil,
     nil,
     StartupInfo,
     ProcessInfo) then
    begin
      // Attendiamo la fine dell"esecuzione del processo
      repeat
        WaitReason := WaitForSingleObject( ProcessInfo.hProcess,100);
        Application.ProcessMessages;
      until (WaitReason <> WAIT_TIMEOUT);
      // Leggiamo la pipe
      Repeat
        BytesRead := 0;
        // Leggiamo "BUFSIZE" bytes dalla pipe
        ReadFile(hReadPipe, Buffer[0], BUFSIZE, BytesRead, nil);
        // Convertiamo in una stringa "\0 terminated"
        Buffer[BytesRead]:= #0;
        // Convertiamo i caratteri da DOS ad ANSI
        OemToAnsi(Buffer,Buffer);
        // Scriviamo nell" "OutMemo" l"output ricevuto tramite pipe
        OutMemo.Text := OutMemo.text + String(Buffer);
      until (BytesRead < BUFSIZE);
    end;
  FreeMem(Buffer);
  CloseHandle(ProcessInfo.hProcess);
  CloseHandle(ProcessInfo.hThread);
  CloseHandle(hReadPipe);
  CloseHandle(hWritePipe);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Dos2Win("test.bat", Memo1);
end;

Можешь переделать под свои нужды, т.к. эта штука явно под VCL.
Я пользовался, работает.


 
Gandalf ©   (2004-03-20 09:21) [2]

В UGH реализвано нечно похожее... уже под KOL


 
Михаил   (2004-03-20 21:15) [3]

Спасибо RA ! Вот еще какой вопрос:
Если вводить команду типа cmd /c dir C:\
то все нормально код работает и выдает результат,
а если ввести допустим cmd /c time то программа повисает и видимо ждет когда я введу новое время и нажму Enter, а так как
к я ничего ввести уже не могу, то все повисает! Подскажите пожалуйста решение, а то там комментарии походу на испанском.


 
Михаил   (2004-03-20 21:17) [4]

Gandalf что такое UGH расскажите поподробней.
Если можно примерчик.


 
<Falcon>   (2004-03-22 14:35) [5]

UGH - программа для компрессии исполняемых файлов, есть на этом сайте с исходниками.Вернее это оболочка для UPX-packer. Очень неплохая вещь. Сжимает файл примерно в 5 раз, правда в чуток загребает памяти.


 
Gandalf ©   (2004-03-22 18:21) [6]

В народном проекте лежит и сорцами. http://kol.mastak.ru


 
RA ©   (2004-03-22 20:11) [7]

Надо же и в правду коментарии на испанском. А я и не замечал.
Попробуй вводить новое время сразу в командной строке
(по-моему в команде time допустим такой параметр - надо только посмореть). А если нужно только время вывести и сямо время не менять, то возможно в команде time и такой параметр имеется.


 
mdw ©   (2004-03-23 11:01) [8]

Ну, ну. Что же, обсуждение параметров команды time, очень интересная тема:))))).


 
Михаил   (2004-03-23 16:36) [9]

Суть не в параметрах time, а возможности работы с командной строкой в интерактивном режиме через мое приложение.



Страницы: 1 вся ветка

Текущий архив: 2004.08.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.051 c
1-1092487611
Samael6
2004-08-14 16:46
2004.08.29
Windows Event Log


14-1092063292
Павел
2004-08-09 18:54
2004.08.29
где найти исходник spy?


6-1088472500
hyper_omsk
2004-06-29 05:28
2004.08.29
(ping) Отсутствует сетевое подключение


14-1091940469
Григорьев Антон
2004-08-08 08:47
2004.08.29
Нужно ли бороться с хинтами и ворнингами?


1-1092339983
Cobalt
2004-08-12 23:46
2004.08.29
Установка компонент в D7