利用管道实现控制台程序输入输出的重定向

急,如何隐藏bcb system命令调用DOS程序窗口

http://topic.csdn.net/u/20100524/17/9bff5c6e-1d1d-43fc-9aaf-86d0c005a798.html

luokimon ( luokimon )

http://hi.csdn.net/luokimon

发表于:2010-05-24 17:35:29

因为我用了几个SYSTEM命令顺序执行,然后DOS窗口会连续的弹出来.想要隐藏弹出的DOS窗口.
或者让几个顺序执行的system命令在一个DOS窗口内显示.

 

 

yeyanbin(南才北往)

http://hi.csdn.net/yeyanbin

 

回复于:2010-05-24 22:41:09

利用管道实现控制台程序输入输出的重定向

C/C++ code
在BCB下创建控制台程序,编译测试通过。 支持UniCode 控制台测试程序(and.exe) #include "vcl.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; }


C/C++ code

实现控制台输入输出重转向的控制程序(或者GUI) #include "vcl.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,π)) { #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; }



用什么方法调用控制台程序,同时做到:1.隐藏控制台窗口;2.获取控制台程序的exit status

http://topic.csdn.net/t/20050326/17/3883795.html

shadowWind (百合已逝)

http://hi.csdn.net/shadowWind

发表于:2005-03-26 17:22:25

用什么方法调用控制台程序,同时做到:1.隐藏控制台窗口;2.获取控制台程序的exit   status

我用system和_spawnlp,返回值就是exit   code,但无法隐藏窗口。
用WinExec(command,SW_HIDE)可以隐藏窗口,但是得不到exit   code。

请指点,谢谢~

 

keiy (keiy)

http://hi.csdn.net/keiy

回复于:2005-03-26 19:48:06

 

成功:
            PROCESS_INFORMATION   pi;
            STARTUPINFO   si;

            //   Set   up   the   start   up   info   struct.
            ZeroMemory(&si,sizeof(STARTUPINFO));

            si.dwFlags   =   STARTF_USESHOWWINDOW;
            si.wShowWindow   =     SW_HIDE;

          CreateProcess(NULL, "d://temp//t.exe ",   NULL,   NULL,   0,
                  NULL,   NULL,   NULL,   &si,   &pi);
          WaitForSingleObject(pi.hThread,INFINITE);
          CloseHandle(pi.hThread);
            DWORD   excode=0;
            GetExitCodeProcess(pi.hProcess,&excode);
      //excode为返回值

 

 

 

 



 

 

 

 

 

 

你可能感兴趣的:(利用管道实现控制台程序输入输出的重定向)