보통 ShellExcute() 함수를 이용해 외부 프로세스를 실행시키곤 합니다.
이때 외부 프로세스가 종료될때 까지 대기 해야 하는 경우가 있는데 이런 경우 사용할 수 있는
두 가지 코드를 설명하겠습니다.
1. WaitForSingleObject() 함수를 사용.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
SHELLEXECUTEINFO sei;
::ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.lpFile = L"Excel_Font_Setting.exe"; // 실행파일
sei.lpDirectory = py_exe_path; // 실행경로
sei.lpParameters = NULL; // 실행인자
sei.nShow = SW_HIDE;
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb = L"open";
DWORD result = ::ShellExecuteEx(&sei);
if (sei.hProcess != NULL) {
// 프로세스 종료까지 대기
WaitForSingleObject(sei.hProcess, INFINITE);
}
|
cs |
2. 반복문과 GetExitCodeProcess() 함수를 사용.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
SHELLEXECUTEINFO sei;
::ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.lpFile = L"Excel_Font_Setting.exe"; // 실행파일
sei.lpDirectory = py_exe_path; // 실행경로
sei.lpParameters = NULL; // 실행인자
sei.nShow = SW_HIDE;
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb = L"open";
ShellExecuteEx(&sei);
DWORD dwExitCode = 0;
while (1) {
::GetExitCodeProcess(sei.hProcess, &dwExitCode);
if (dwExitCode != STILL_ACTIVE) {
//MessageBox(L" Excel_Font_Setting.exe 종료");
break;
}
}
|
cs |
'MFC > MFC 관련 설명 모음' 카테고리의 다른 글
Visual Studio 프로젝트 버전 확인 하는 방법 (0) | 2022.01.07 |
---|---|
[MFC] 실행파일 아이콘 변경하는 방법 (0) | 2021.07.30 |
MFC Gride Control 추가2 - Cell Merge (0) | 2021.07.28 |
MFC Gride Control 추가. (0) | 2021.07.28 |
[MFC] 레지스트리 에서 키 정보 가져오기. (0) | 2021.07.09 |