MFC 명령 프롬프트(CMD) 실행 및 결과 스트링 반환
Develop2018. 11. 30. 18:43
윈도우 개발 시 명령 프롬프트 창을 숨겨 실행하고, 결과 스트링 값을 이용 해야 할 때가 종종 발생합니다.
ExecCommand 함수는 원하는 명령 프롬프트를 실행하고 실행 결과 값을 스트링 문자열로 반환하는 함수입니다. 이 함수를 통해 시스템 변수를 읽거나, 자바 또는 파이썬 스크립트를 실행하고, 자신이 만든 배치파일 등을 실행 할 수 있습니다. 함수 사용 시 파라미터에 띄어쓰기가 포함되어 이중따움표( " )를 사용해야 하는 경우는 ( \" )와 같이 사용합니다. 아래 함수 사용 예를 참고하면 되겠습니다.
ExecCommand 함수
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | std::string ExecCommand(std::string szCmdArg) { std::string szResult; HANDLE hChildStdoutRd; HANDLE hChildStdoutWr; BOOL fSuccess; // Create security attributes to create pipe. SECURITY_ATTRIBUTES saAttr = { sizeof(SECURITY_ATTRIBUTES) }; saAttr.bInheritHandle = TRUE; saAttr.lpSecurityDescriptor = NULL; // Create a pipe to get results from child's stdout. if (!CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0)) { return szResult; } STARTUPINFOA si = { sizeof(STARTUPINFO) }; si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; si.hStdOutput = hChildStdoutWr; si.hStdError = hChildStdoutWr; si.wShowWindow = SW_HIDE; PROCESS_INFORMATION pi = { 0 }; // Create the child process. fSuccess = CreateProcessA( NULL, (LPSTR)szCmdArg.c_str(), // command line NULL, // process security attributes NULL, // primary thread security attributes TRUE, // TRUE=handles are inherited. Required. CREATE_NEW_CONSOLE, // creation flags NULL, // use parent's environment NULL, // use parent's current directory &si, // __in, STARTUPINFO pointer &pi); // __out, receives PROCESS_INFORMATION if (!fSuccess) { return szResult; } // Wait until child processes exit. Don't wait forever. WaitForSingleObject(pi.hProcess, 2000); TerminateProcess(pi.hProcess, 0); if (!CloseHandle(hChildStdoutWr)) { return szResult; } for (;;) { DWORD dwRead; CHAR chBuf[4096]; bool done = !ReadFile(hChildStdoutRd, chBuf, 4096, &dwRead, NULL) || dwRead == 0; if (done) { break; } szResult += chBuf; } CloseHandle(hChildStdoutRd); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return szResult; } | cs |
함수 사용 예
1 2 | std::string szResult = ExecCommand("python --version"); std::string szResult = ExecCommand("test.bat \"첫 번째 파라미터\" \"두 번째 파리미터\""); | cs |
참고: https://snipplr.com/view/35935/
'Develop' 카테고리의 다른 글
MFC 유니코드(UNICODE) 멀티바이트(ANCI) 문자열 변환함수 (0) | 2018.12.04 |
---|---|
MFC 숫자 3자리 단위마다 콤마 넣기 (1) | 2018.11.28 |
[NODE.JS] SMS API를 적용해보자 - COOLSMS (0) | 2018.11.08 |
MFC 특정 윈도우 화면 캡쳐/미러링 기능 (1) | 2018.11.07 |
미리컴파일된 OpenSSL (0) | 2018.11.04 |
댓글 영역