S
_sntprintf ist definiert in tchar.h, aber da brauchst Du stdio.h zuerst (in C::B).
Mit der Pipe ist so, dass muß man den "write-end" nach CreateProcess schließen
#include <windows.h>
#include <stdio.h>
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
SECURITY_ATTRIBUTES sa;
char szName[MAX_PATH];
HANDLE hPipeRead, hPipeWrite;
sa.nLength=sizeof(sa);
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
CreatePipe(&hPipeRead,&hPipeWrite, &sa, 0);
si.hStdOutput = hPipeWrite;
si.hStdError = si.hStdOutput;
CreateProcess(0, "cmd.exe /c dir %SYSTEMROOT%\\system32", NULL, NULL, TRUE, 0, NULL, 0, &si, &pi);
CloseHandle(hPipeWrite); // wichtig !!!
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
char buff[1024];
while (ReadFile(hPipeRead,buff,sizeof(buff)-1,&si.dwX,NULL) && si.dwX) // borrow si.dwX
{
buff[si.dwX]=0; // oder einfach writefile hStdOut
printf("%s", buff);
}
CloseHandle(hPipeRead);
}
Und die direkte Methode mit STD umgeleitet: (my fault)
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError = si.hStdOutput;
SetHandleInformation(si.hStdOutput, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT);