Главная страница
    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.01 c
1-28699
Сергей
2003-01-31 14:16
2003.02.10
Вертикальная прокрутка ListBox


1-28724
KA_
2003-01-31 17:50
2003.02.10
TRichEdit


4-29171
Maxim___
2002-12-26 10:16
2003.02.10
mY Punto Switcher


1-28755
race1
2003-02-01 11:28
2003.02.10
vcl50


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