C ++에서 "시스템"을 호출 할 때 콘솔을 억제합니다.
-
05-07-2019 - |
문제
나는 사용하고있다 system
C ++의 명령으로 일부 외부 프로그램을 호출하고 사용할 때마다 명령이 완료된 후 콘솔 창이 열리고 닫힙니다.
콘솔 창의 개방을 피하려면 어떻게해야합니까? 솔루션이 플랫폼 독립적 일 수 있다면 행복 할 것입니다. 또한 명령이 완료 될 때까지 내 프로그램이 기다리기를 원합니다.
해결책
Windows를 사용하는 것처럼 들립니다.
Linux (및 일반적으로 *nix)에서는 전화를 대체합니다. system
전화로 fork
그리고 exec
, 각각. Windows에서는 Windows API에 일종의 Spawn-A-New 프로세스 기능이 있다고 생각합니다.
쉘 명령 및/또는 외부 프로그램을 실행할 때, 귀하의 프로그램은 플랫폼 독립성을 만들기가 어렵습니다. 실행중인 명령 및/또는 외부 프로그램이있는 플랫폼에 따라 달라지기 때문입니다.
다른 팁
이것은 아마도 가장 쉽고 가장 좋은 방법 일 것입니다. 이것은 또한이 명령을 실행하는 동안 프로그램이 정지되지 않도록 만들 것입니다. 처음에는 Windows 헤더를 사용하는 것을 잊지 마십시오.
#include <Windows.h>
그런 다음 명령을 실행하려면 다음 기능을 사용해야합니다.
WinExec("your command", SW_HIDE);
메모; 그만큼 WinExec
방법은 10 년 넘게 더 이상 사용되지 않았습니다. 그래도 오늘도 여전히 잘 작동합니다. 필요하지 않은 경우이 메소드를 사용해서는 안됩니다.
... 당신 대신 ~하지 않다 사용하고 싶다;
system("your command");
exec ()는 posix와 같이 독립적 인 플랫폼 독립적 인 것처럼 보입니다. Windows에서는 _exec ()이지만 Unix에서 exec ()입니다. http://msdn.microsoft.com/en-us/library/431x4c1w(vs.71).aspx
오류. CreateProcess
또는 ShellExecute
.
다음은 새로운 것을없이 명령을 실행하는 방법입니다. cmd.exe
창문. 기반 롤랜드 라비안의 대답 그리고 MSDN, 나는 작업 기능을 작성했다 :
int windows_system(const char *cmd)
{
PROCESS_INFORMATION p_info;
STARTUPINFO s_info;
LPSTR cmdline, programpath;
memset(&s_info, 0, sizeof(s_info));
memset(&p_info, 0, sizeof(p_info));
s_info.cb = sizeof(s_info);
cmdline = _tcsdup(TEXT(cmd));
programpath = _tcsdup(TEXT(cmd));
if (CreateProcess(programpath, cmdline, NULL, NULL, 0, 0, NULL, NULL, &s_info, &p_info))
{
WaitForSingleObject(p_info.hProcess, INFINITE);
CloseHandle(p_info.hProcess);
CloseHandle(p_info.hThread);
}
}
모든 Windows 플랫폼에서 작동합니다. 당신처럼 전화하십시오 system()
.