티스토리 뷰

프로그래밍/MFC

프로세스

에어버스 2017. 3. 18. 13:23

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,  NULLNULL, FALSE, 0NULLNULL&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


 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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