티스토리 뷰
A프로세스에서 NotePad.exe 실행하고, B 프로세스를 찾아 NotePad 의 프로세스ID를 전송하면,
B프로세스에서 A프로세스에서 받은 ID로 NotePad를 종료한다.
A 프로세스 소스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
HWND hProcB = ::FindWindow(NULL, L"ProcB");
STARTUPINFO si = { sizeof(STARTUPINFO), };
PROCESS_INFORMATION pi;
if (hProcB == NULL)
{
AfxMessageBox(L"ProcB 를 먼저 실행해 주십시요.");
return;
}
if (::CreateProcess(L"C:\\Windows\\NotePad.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi) == TRUE)
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
::SendMessage(hProcB, WM_USER + 1, (WPARAM)pi.dwProcessId, 0);
|
cs |
B 프로세스 소스
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 |
BEGIN_MESSAGE_MAP(CProcBDlg, CDialogEx)
....
ON_MESSAGE(WM_USER+1, &CProcBDlg::OnUserMsg)
ON_WM_LBUTTONDBLCLK()
END_MESSAGE_MAP()
LRESULT CProcBDlg::OnUserMsg(WPARAM wParam, LPARAM lparam)
{
DWORD ProcID = wParam;
m_hProc = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcID);
return 0L;
}
void CProcBDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
DWORD ExitCode;
GetExitCodeProcess(m_hProc, &ExitCode);
if (ExitCode != STILL_ACTIVE)
AfxMessageBox(L"프로세스 핸들이 유효합니다.");
else
{
AfxMessageBox(L"프로세스를 종료합니다.");
TerminateProcess(m_hProc, 0);
m_hProc = 0;
}
CDialogEx::OnLButtonDblClk(nFlags, point);
} |
cs |