Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
Михаил   (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 вся ветка

Форум: "KOL";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.032 c
14-1092313450
Nikolay M.
2004-08-12 16:24
2004.08.29
Письма от БрейнБенча


14-1091918502
GanibalLector
2004-08-08 02:41
2004.08.29
July TAXI


4-1090164957
SashOK
2004-07-18 19:35
2004.08.29
ОТключить устройство


8-1086496810
Артем К.
2004-06-06 08:40
2004.08.29
Как продублировать картинку по окружности?


14-1091771704
benito
2004-08-06 09:55
2004.08.29
Реорганизация Потрепаться- молодые и сильные выживут





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский