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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с консолью, Работа с консолью Delphi 
:(
    Опции темы
maleziv
Дата 5.12.2011, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток  уважаемые.
Вопрос в следующем, как прочитать содержимое консоли после выполнение команды.
Демонстрирую на примере “Командной строки” (cmd), в будущем консоль  будет немного  другая, пока тестирую на этой.
Программно посылаю в консоль команду dir. Как результат выполнения команды dir поместить в переменную(то есть содержимое отображенное в консоли, выполненной команды dir  записать в  переменную)? 
Хочу добавить, что  в той консоли для которой пишется  программа команды “Командной строки” не работают. Варианты типа  “Создать батник и перенаправить стандартный вывод в файл не подойдут”. Необходимо непосредственно считывать данные с консоли после выполнения в ней команд. При чем консоль всегда запущена, и ее нельзя закрывать-открывать. Работаю с “Командной строкой”, т.к  пока нет возможности работать напрямую с консолью для которой  пишется программа из за ее производственной необходимости. Прошу  помочь разобраться. 
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  Window,Panel,Group,Button:hwnd;
  i: Integer;
  s, ss: string;
   p:PChar;
begin
Window:=FindWindow(nil, 'Командная строка);
 p:=StrAlloc(20);
// if Window<>0 then ShowMessage('Ed');
if Window <> 0 then
   begin
     s := 'dir';
     for i := 1 to Length(s) do
     begin
       SendMessage(Window, WM_CHAR, Word(s[i]), 0);
        sleep(100);
        end;
     // Simulate Return Key.
    PostMessage(Window, WM_KEYDOWN, VK_RETURN, 0);
   end;

end;


Это сообщение отредактировал(а) maleziv - 5.12.2011, 22:39

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  QW.JPG 34,50 Kb
PM MAIL   Вверх
Delvish
Дата 6.12.2011, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


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

Репутация: 2
Всего: 4



используй Pipes. пример пинга из командной строки:

Код

function Ping(IP : String) : String;
const BUFSIZE = 2000;
var
   hReadPipe,
   hWritePipe : THandle;
   Buffer     : Pchar;
   WaitReason,
   BytesRead  : DWord;
begin 
with SecAttr do 
begin 
  nlength              := SizeOf(TSecurityAttributes); 
  binherithandle       := true; 
  lpsecuritydescriptor := nil; 
end; 
if Createpipe (hReadPipe, hWritePipe, @SecAttr, 0) then 
begin
  Buffer  := AllocMem(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('ping.exe '+ IP),
     @SecAttr, 
     @SecAttr, 
     true,
     NORMAL_PRIORITY_CLASS,
     nil, 
     nil, 
     StartupInfo, 
     ProcessInfo) then 
    begin
      repeat 
        WaitReason := WaitForSingleObject(ProcessInfo.hProcess, 50);
        Application.ProcessMessages; 
      until (WaitReason <> WAIT_TIMEOUT);
      Repeat 
        BytesRead := 0; 
        ReadFile(hReadPipe, Buffer[0], BUFSIZE, BytesRead, nil); 
        Buffer[BytesRead]:= #0; 
        OemToAnsi(Buffer,Buffer);
        Result := String(Buffer);
      until (BytesRead < BUFSIZE); 
    end;
  FreeMem(Buffer); 
  CloseHandle(ProcessInfo.hProcess); 
  CloseHandle(ProcessInfo.hThread);
  CloseHandle(hReadPipe); 
  CloseHandle(hWritePipe); 
end;
end;


Это сообщение отредактировал(а) Delvish - 6.12.2011, 09:29
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.

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


 




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


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

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