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

Вниз

Pipe - труба !   Найти похожие ветки 

 
HappyNewYearToAll   (2002-12-25 18:51) [0]

Зддравствуйте, мастаки! Возник вопрос следующего плана. Организую трубу след. образом

function CreatePipedProcess(lpCommandLine: PChar): string;
var
lpPipeAttributes: TSecurityAttributes;
hReadPipe: THandle;
hWritePipe: THandle;
lpStartupInfo: TStartupInfo;
lpProcessInformation: TProcessInformation;
lpNumberOfBytesRead: DWORD;
Buffer: array [0..1023] of Char;
begin
Result := "";
ZeroMemory(@lpPipeAttributes, SizeOf(TSecurityAttributes));
lpPipeAttributes.nLength := SizeOf(TSecurityAttributes);
lpPipeAttributes.bInheritHandle := True;
if CreatePipe(hReadPipe, hWritePipe, @lpPipeAttributes, 0) then
begin
ZeroMemory(@lpStartupInfo, SizeOf(TStartupInfo));
lpStartupInfo.cb := SizeOf(TStartupInfo);
lpStartupInfo.dwFlags := STARTF_USESTDHANDLES;
lpStartupInfo.hStdOutput := hWritePipe;
lpStartupInfo.hStdError := hWritePipe;
lpStartupInfo.dwFlags := lpStartupInfo.dwFlags or STARTF_USESHOWWINDOW;
lpStartupInfo.wShowWindow := SW_HIDE;
if CreateProcess(nil, lpCommandLine, nil, nil, True, CREATE_NEW_CONSOLE,
nil, PChar(CurrFolder), lpStartupInfo, lpProcessInformation) then
try
CloseHandle(hWritePipe);
Buffer[0] := #0;
repeat
Result := Result + Buffer;
ZeroMemory(@Buffer, SizeOf(Buffer));
lpNumberOfBytesRead := 0;
until not ReadFile(hReadPipe, Buffer, SizeOf(Buffer) - 1, lpNumberOfBytesRead, nil);
finally
CloseHandle(hReadPipe);
CloseHandle(lpProcessInformation.hThread);
CloseHandle(lpProcessInformation.hProcess);
end;
end;
end;

при вызове консольных приложений всё ОК, если же из своей ком. строки вызываю приложение (напр. инет експлорер), происходит зависание на выделенной строке, и отпускает только при закрытии того самого приложения. Видимо пытается прочесть данные, которые и не должны поступать. Как обойти?


 
Song ©   (2002-12-25 20:26) [1]

А какого ты эффекта хочешь добиться вызывая IE ?


 
HappyNewYearToAll   (2002-12-26 08:16) [2]

вот я и спрашиваю - кроме как консольные, можно еще какие приложения вызывать таким образом или так и должно быть?


 
Song ©   (2002-12-26 08:42) [3]

Ты не понимаешь, что такое pipe, иначе у тебя не появлялось бы желание применить к нему оконное! приложение.


 
HappyNewYearToAll   (2002-12-26 09:20) [4]

да все я прекрасно понимаю, что от оконных приложений просто нечего перенаправлять в свою прогу. Просто в этой своей комстроке хотелось вызывать любые приложения. Если был бы к.-н. способ определения, консольное приложение или нет. Спасибо за совет.


 
Cobalt ©   (2002-12-26 10:06) [5]

Попробуй читать заголовок (формат PE Executable) файла ехе-ника, и смотреть флаг - консоль или GUI.


 
HappyNewYearToAll   (2002-12-26 10:28) [6]

не подскажешь ли мне, ламеру, как это сделать или хотя бы какие функции юзать?


 
Cobalt ©   (2002-12-26 19:50) [7]

Для начала - ламер - это воинствующий невежда.
2) поиск -> Формат PE(Portable Executable) файлов
насколько я знаю, функций для этого (определения консоль/гуи) нет, хотя, посмотри на ubpfd (точная ссылка - в основном форуме)


 
HappyNewYearToAll   (2002-12-27 12:10) [8]

2Cobalt © (26.12.02 19:50)
тогды чайник ;)
пасиба, попробую поискать.



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

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

Наверх




Память: 0.48 MB
Время: 0.021 c
1-28916
xZeus
2003-01-30 12:13
2003.02.10
Использование C++Builder в Delphi


14-29042
Romkin
2003-01-23 11:59
2003.02.10
Интеграл 3/8


3-28599
Jeka
2003-01-22 15:46
2003.02.10
Подсчет итогов по столбцу таблицы


4-29145
Николай Быков
2002-12-25 12:50
2003.02.10
Мне сказали, что это про WinAPI вопрос.......................


1-28822
!!!!!!!!!!!!!!!!!!!!!!!!!
2003-02-02 16:23
2003.02.10
Как вызвать стандартные окна свойсв (свойства экрана например) ?