Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.07.2011, 16:56
Аватар для bender42
bender42 bender42 вне форума
Прохожий
 
Регистрация: 10.04.2011
Сообщения: 11
Репутация: 10
Восклицание Вывод консоли в memo + Открытие архива .img

доброе время суток.
вот возник вопрос как перехватить консоль
суть в том чтоб memo полностью стало консолью каторую я хочу перехватить и реализовать работу с файломи
консоль это colinux запускающийся с параметром

Код:
colinux-daemon.exe -t nt @server/server.conf fastboot nogui

Скрин работы с файломи:
http://s012.radikal.ru/i321/1107/5a/13387010e367.jpg
=================================== =======================
Открытие архива .img
нужно открыть файл из этого образа 123.img и отредактировать строки в нём
чтоб они выводились в Edit1,Edit2,Edit3 и т.п
место расположение файла мне изветно
если это чтото изменит скрин консоли colinux
при запуски
http://s015.radikal.ru/i332/1107/7d/26ac1525ecf8.jpg
и скрин файла
http://s014.radikal.ru/i326/1107/9c/20c6905b07ca.jpg
Если вам нетрудно поделитесь исходником или кодом=(
За рание спосибо.
Ответить с цитированием
  #2  
Старый 21.07.2011, 17:02
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Лови модуль, буквально вчера писал. Точно знаю что работает на Delphi XE, про остальные версии 100% утверждать не берусь, но теоретически работать должно.
Код:
unit ConsoleAppRunner;

interface
uses
  Classes;
procedure RunConsoleApplication(CmdLine,Params:AnsiString;OutStrings:TStrings);

implementation
uses
  Windows,AnsiStrings;
procedure RunConsoleApplication(CmdLine,Params:AnsiString;OutStrings:TStrings);
var
  securityattributes: TSecurityAttributes;
  startupinfo: TStartupInfoA;
  processinformation: TProcessInformation;
  hPipeInputRead: THandle;
  hPipeInputWrite: THandle;
  hPipeOutputRead: THandle;
  hPipeOutputWrite: THandle;
  WaitResult:Cardinal;
  buf: array [0..1023] of AnsiChar;
  dummy: Cardinal;
begin
  OutStrings.Append(#13#10);
  securityattributes.nLength:=SizeOf(TSecurityAttributes);
  securityattributes.lpSecurityDescriptor:=nil;
  securityattributes.bInheritHandle:=True;
  CreatePipe(hPipeInputRead, hPipeInputWrite, @securityattributes, 0);
  CreatePipe(hPipeOutputRead, hPipeOutputWrite, @securityattributes, 0);
  ZeroMemory(@startupinfo, SizeOf(TStartupInfo));
  ZeroMemory(@processinformation, SizeOf(TProcessInformation));
  startupinfo.cb:=SizeOf(TStartupInfo);
  startupinfo.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
  startupinfo.wShowWindow:=SW_HIDE;
  startupinfo.hStdInput:=hPipeInputRead;
  startupinfo.hStdOutput:=hPipeOutputWrite;
  startupinfo.hStdError:=hPipeOutputWrite;
  OutStrings.BeginUpdate;
  OutStrings.Append(CmdLine+' '+Params);
  OutStrings.EndUpdate;
  if CreateProcessA(nil, PAnsiChar(CmdLine+' '+Params), nil, nil, True, CREATE_NEW_CONSOLE,
    nil, PAnsiChar(AnsiStrings.ExtractFileDir(CmdLine)), startupinfo, processinformation) then
    begin
      repeat
        WaitResult:=WaitForSingleObject(processinformation.hProcess, 100);
        if ReadFile(hPipeOutputRead, buf, Length(buf), dummy, nil) then
          begin
            OemToAnsiBuff(buf, buf, dummy);
            OutStrings.BeginUpdate;
            OutStrings.Text:=OutStrings.Text+Copy(buf, 1, dummy);
            OutStrings.EndUpdate;
          end;
      until WaitResult<>WAIT_TIMEOUT;
      CloseHandle(processinformation.hProcess);
    end;
  CloseHandle(hPipeInputWrite);
  CloseHandle(hPipeInputRead);
  CloseHandle(hPipeOutputWrite);
  CloseHandle(hPipeOutputRead);
end;
end.
Параметры:
CmdLine - exe-файл (указываем полный путь, далее этот путь будет использоваться как рабочий каталог)
Params - параметры
OutStrings - объект для вывода результатов (в самом простом варианте это Memo1.Lines)
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 22.07.2011, 16:11
Аватар для bender42
bender42 bender42 вне форума
Прохожий
 
Регистрация: 10.04.2011
Сообщения: 11
Репутация: 10
По умолчанию

Код:
procedure RunConsoleApplication(CmdLine,Params:AnsiString;OutStrings:TStrings);
var
  securityattributes: TSecurityAttributes;
  startupinfo: TStartupInfoA;//тут ругается и после этого на всё остальное
  processinformation: TProcessInformation;
  hPipeInputRead: THandle;
  hPipeInputWrite: THandle;
  hPipeOutputRead: THandle;
  hPipeOutputWrite: THandle;
  WaitResult:Cardinal;
  buf: array [0..1023] of AnsiChar;
  dummy: Cardinal;
begin
  OutStrings.Append(#13#10);
  securityattributes.nLength:=SizeOf(TSecurityAttributes);
  securityattributes.lpSecurityDescriptor:=nil;
  securityattributes.bInheritHandle:=True;
  CreatePipe(hPipeInputRead, hPipeInputWrite, @securityattributes, 0);
  CreatePipe(hPipeOutputRead, hPipeOutputWrite, @securityattributes, 0);
  ZeroMemory(@startupinfo, SizeOf(TStartupInfo));
  ZeroMemory(@processinformation, SizeOf(TProcessInformation));
  startupinfo.cb:=SizeOf(TStartupInfo);
  startupinfo.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
  startupinfo.wShowWindow:=SW_HIDE;
  startupinfo.hStdInput:=hPipeInputRead;
  startupinfo.hStdOutput:=hPipeOutputWrite;
  startupinfo.hStdError:=hPipeOutputWrite;
  OutStrings.BeginUpdate;
  OutStrings.Append(CmdLine+' '+Params);
  OutStrings.EndUpdate;
  if CreateProcessA(nil, PAnsiChar(CmdLine+' '+Params), nil, nil, True, CREATE_NEW_CONSOLE,
    nil, PAnsiChar(AnsiStrings.ExtractFileDir(CmdLine)), startupinfo, processinformation) then
    begin
      repeat
        WaitResult:=WaitForSingleObject(processinformation.hProcess, 100);
        if ReadFile(hPipeOutputRead, buf, Length(buf), dummy, nil) then
          begin
            OemToAnsiBuff(buf, buf, dummy);
            OutStrings.BeginUpdate;
            OutStrings.Text:=OutStrings.Text+Copy(buf, 1, dummy);
            OutStrings.EndUpdate;
          end;
      until WaitResult<>WAIT_TIMEOUT;
      CloseHandle(processinformation.hProcess);
    end;
  CloseHandle(hPipeInputWrite);
  CloseHandle(hPipeInputRead);
  CloseHandle(hPipeOutputWrite);
  CloseHandle(hPipeOutputRead);
end;

end.

вот=\
Ответить с цитированием
  #4  
Старый 23.07.2011, 07:47
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Замени TStartupInfoA на TStartupInfo
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #5  
Старый 23.07.2011, 10:58
Аватар для bender42
bender42 bender42 вне форума
Прохожий
 
Регистрация: 10.04.2011
Сообщения: 11
Репутация: 10
По умолчанию

http://i027.radikal.ru/1107/78/80f1409ff0e2.jpg
вот чё выдаёт щяс
Ответить с цитированием
  #6  
Старый 23.07.2011, 14:06
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Убери AnsiStrings из Uses, он мне только для XE нужен был.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:53.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025