在vc++6.0 创建控制台程序,编译测试通过。支持UniCode
控制台测试程序(and.exe)
#include "stdafx.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
int x,y;
// while(1)
{
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);
}
return 0;
}
实现控制台输入输出重转向的控制程序(或者GUI)
#include "stdafx.h"
#include "Windows.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
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 1;
}
sa2.nLength = sizeof(SECURITY_ATTRIBUTES);
sa2.lpSecurityDescriptor = NULL;
sa2.bInheritHandle = TRUE;
if (!CreatePipe(&hInputRead,&hInputWrite,&sa2,0))
{
printf("Error On CreatePipe2");
return 1;
}
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;
TCHAR cmd_line[100];
lstrcpy(cmd_line,TEXT("d://and.exe"));
DWORD dwWritten;
if (!CreateProcess(NULL,cmd_line,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
#ifdef UNICODE
wprintf(TEXT("Error On CreateProcess"));
#else
printf(TEXT("Error On CreateProcess"));
#endif
return 1;
}
CloseHandle(hInputRead);
CloseHandle(hOutputWrite);
char szInPut[]= ("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);
return 0;
}