// 重定向控制台程序的输入输出主程序代码
#include "Windows.h"
#include "stdio.h"
void main()
{
SECURITY_ATTRIBUTES sa,sa2;
HANDLE hInputRead,hInputWrite;
HANDLE hOutputRead,hOutputWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hOutputRead,&hOutputWrite,&sa,0))
{
printf("Error On CreatePipe1");
return;
}
sa2.nLength = sizeof(SECURITY_ATTRIBUTES);
sa2.lpSecurityDescriptor = NULL;
sa2.bInheritHandle = TRUE;
if (!CreatePipe(&hInputRead,&hInputWrite,&sa2,0))
{
printf("Error On CreatePipe2");
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hOutputWrite;
si.hStdOutput = hOutputWrite;
si.hStdInput = hInputRead;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
DWORD dwWritten;
if (!CreateProcess(NULL,"E:\\and.exe",NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
printf("Error On CreateProcess");
return;
}
CloseHandle(hInputRead);
CloseHandle(hOutputWrite);
char szInPut[10] = "12\r\n 34\r\n";// 输入
WriteFile(hInputWrite, szInPut, strlen(szInPut), &dwWritten, NULL);
char buffer[4096] = {0};
DWORD bytesRead;
while (true)
{
if(ReadFile(hOutputRead,buffer,4095,&bytesRead,NULL) == NULL)
{
break;
}
printf(buffer);// 输出
Sleep(500);
}
CloseHandle(hInputWrite);
CloseHandle(hOutputRead);
}
//测试用and.exe的代码
/*
#include "stdio.h"
void main()
{
int x,y;
printf("Input First Num:\r\n");
scanf( "%d", &x );
printf("Input Second Num:\r\n");
scanf( "%d", &y );
printf("%d + %d = %d\r\n",x,y,x+y);
}
*/