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
-~----------~----~----~----~------~----~------~--~---

Raspunde prin e-mail lui