Причем CreateChildProcess - это не API - это моя функция! Вот она:
Code: |
function TChildProc.CreateChildProcess(ExeName, CommadLine: string; StdIn, StdOut: THandle): Boolean; var piProcInfo: TProcessInformation; siStartInfo: TStartupInfo; begin // Set up members of STARTUPINFO structure. ZeroMemory(@siStartInfo, SizeOf(TStartupInfo)); siStartInfo.cb := SizeOf(TStartupInfo); siStartInfo.hStdInput := StdIn; siStartInfo.hStdOutput := StdOut; siStartInfo.dwFlags := STARTF_USESTDHANDLES; // Create the child process. Result := CreateProcess(nil, PChar(ExeName + ' ' + CommadLine), // command line nil, // process security attributes nil, // primary thread security attributes TRUE, // handles are inherited 0, // creation flags nil, // use parent's environment nil, // use parent's current directory siStartInfo, // STARTUPINFO pointer piProcInfo); // receives PROCESS_INFORMATION end; |
Здесь важное значение имеют вот эти строчки:
Code: |
siStartInfo.hStdInput := StdIn; siStartInfo.hStdOutput := StdOut; siStartInfo.dwFlags := STARTF_USESTDHANDLES; |
Первые две - понятно. А третья - читайте Хелп! Там все написано...
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!