Réponse acceptée !
J'ai un peu modifié ton code pour avoir un truc qui marche:
#include<windows.h>
#include<stdio.h>
HANDLE rdpipesend, rdpipercv, wrpipesend, wrpipercv;
DWORD WINAPI ReadThread(LPVOID lpParameter)
{
char buffer[4096];
DWORD dwRead;
while(1)
{
ReadFile(rdpipercv, buffer, sizeof buffer - 1, &dwRead, NULL);
buffer[dwRead] = 0;
CharUpper(buffer);
printf(buffer);
}
return 1;
}
DWORD WINAPI WriteThread(LPVOID lpParameter)
{
char buffer[4096];
DWORD dwWritten;
while(1)
{
fgets(buffer, sizeof buffer, stdin);
WriteFile(wrpipesend, buffer, strlen(buffer), &dwWritten, 0);
}
return 1;
}
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
SECURITY_ATTRIBUTES sa;
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = 0;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
CreatePipe( &rdpipesend, &wrpipesend, &sa, 0);
CreatePipe( &rdpipercv, &wrpipercv, &sa, 0);
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdInput = rdpipesend;
si.hStdOutput = wrpipercv;
ZeroMemory(&pi, sizeof(pi));
BOOL b = CreateProcess(0, "cmd", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
CreateThread(0, 0, ReadThread, 0, 0, 0);
WaitForSingleObject(CreateThread(0, 0, WriteThread, 0, 0, 0), INFINITE);
CloseHandle(rdpipesend);
CloseHandle(rdpipercv);
CloseHandle(wrpipesend);
CloseHandle(wrpipercv);
system("pause");
}
_____________________________________
Un éditeur de ressources gratuit pour Windows