On 10/08/2007 09:58, Mike Williams wrote: > On 10/08/2007 02:01, Ilya Bobir wrote: >> Ilya Bobir wrote: >>> [...] >>> >>> It does work on NT. But CreateProcess(..., CREATE_NO_WINDOW, ...) is >>> needed. An example implementation is attached. >>> >> I've just found slightly different approach to creating a console for a >> child process. It has an advantage of creating one console per child >> thus allowing communication with more that one child process. >> Here is the code: >> >> SECURITY_ATTRIBUTES sa; >> PROCESS_INFORMATION pi; >> HANDLE newstdin, newstdout; >> HANDLE read_stdout, write_stdin; >> >> sa.lpSecurityDescriptor = 0; >> sa.nLength = sizeof(SECURITY_ATTRIBUTES); >> sa.bInheritHandle = true; >> >> CreatePipe(&newstdin, &write_stdin, &sa, 0); >> CreatePipe(&read_stdout, &newstdout, &sa, 0); >> >> GetStartupInfo(&si); >> si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; >> si.wShowWindow = SW_HIDE; // hide child application window >> si.hStdOutput = newstdout; // use newstdout instead of STDOUT >> si.hStdError = newstdout; // use newstdout instead of STDERR >> si.hStdInput = newstdin; // use newstdin instead of STDIN >> >> if(0 == CreateProcess( >> exe, NULL, NULL, NULL, true, CREATE_NEW_CONSOLE, >> NULL, NULL, &si, &pi)) >> { >> printf("\nCreateProcess() fails with error: %i", GetLastError()); >> return -1; >> } >> >> >> In case pipes are in blocking mode then the PeekNamedPipe() call can be >> used to check for incoming data: >> >> if (0 == PeekNamedPipe( >> read_stdout, buf, BUFSIZE - 1, &bread, &avail, NULL)) >> { >> printf("\nPeekNamedPipe() fails with error: %i", GetLastError()); >> break; >> } >> >> if (bread > 0) >> { >> // Data have arrived >> } > > All looks good stuff - I'll try and get round to trying it out this weekend.
Ok, starting to look into this in detail. I was delayed from moving over to using a Mercurial repository to track released VIM patches and my own hacking around with the source. Progress wont be as fast as Windows hacking is not my usual job - then again I hack VIM on WIndows to learn ;-) More soon(ish). Mike -- When I want your help, I'll ask for it. Help? --~--~---------~--~----~------------~-------~--~----~ You received this message from the "vim_dev" maillist. For more information, visit http://www.vim.org/maillist.php -~----------~----~----~----~------~----~------~--~---