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

Вниз

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 вся ветка

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

Наверх




Память: 0.46 MB
Время: 0.009 c
1-28791
Blacked
2003-02-01 01:23
2003.02.10
Как поместить Форму на TabSheet?


1-28733
Warlib
2003-01-31 18:22
2003.02.10
Обработчик событий для OLE объекта!


14-29047
Zaxar
2003-01-24 11:59
2003.02.10
Отставание системного времени & антивирусы..


6-28976
pavlov
2002-12-19 17:32
2003.02.10
Сокеты - синхронный режим


14-29009
gn
2003-01-23 06:42
2003.02.10
А вообще кто вочто верит





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский