티스토리 뷰

개발/VC++ (MFC)

MFC : Windows 프로세스간 통신

부캐: 개발하는 조대리 2023. 7. 13. 15:31
반응형

Windows 프로세스간 통신

MFC를 이용하여 Windows 프로세스(exe)간 통신하는 방법을 소개합니다.

a. 통신할 대상 프로그램을 찾습니다. (Sender) - FindWindow
b. 전달할 메시지를 정의합니다. (Sender) - COPYDATASTRUCT
c. 정의한 메시지를 Recver 프로세스에게 전달합니다. (Sender) - SendMessage
d. 수신된 메시지를 처리합니다. (Recver)

 

1. 송신부(Sender) 구현 소스입니다.

a ~ c 과정이 포함되어 있습니다.

// a. 통신할 대상 프로그램을 찾습니다. (Sender)
HWND handle = ::FindWindow(NULL, _T("Kill Process"));
 
  if (handle != NULL) {
    // b. 전달할 메시지를 정의합니다. (Sender)
    COPYDATASTRUCT nCopyData;
    CString strMsg = _T("");
    strMsg.Format(_T("ALIVE process\n"));
    nCopyData.dwData = 312;
    nCopyData.cbData = strMsg.GetLength();
    nCopyData.lpData = (TCHAR*)(LPCTSTR)strMsg;    
    // c. 정의한 메시지를 Recver 프로세스에게 전달합니다. (Sender)
    ::SendMessage(handle, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&nCopyData);
  }
  else {
    // 
  }

 

2. 수신부(Recver) 구현 소스입니다.

d 과정이 포함되어 있습니다.

/////////////////////////////////////////////////////////////////////////////
## .h file
// 사용자 정의 메시지 처리 함수 선언
afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);

/////////////////////////////////////////////////////////////////////////////
## cpp file
// 사용자 정의 메시지 맵 등록
BEGIN_MESSAGE_MAP(ReceiveDlg, CDialogEx)
	ON_WM_COPYDATA()
END_MESSAGE_MAP()

// 사용자 정의 메시지 처리 구현
// d. 수신된 메시지를 처리합니다. (Recver)
BOOL ReceiveDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
    COPYDATASTRUCT* cs = pCopyDataStruct;
    if (cs->dwData == 312)
    {
        TCHAR* lpBuffer = (TCHAR*)cs->lpData;
        CString str(lpBuffer);
    }
    return CDialogEx::OnCopyData(pWnd, pCopyDataStruct);
}

 


 

개인적으로 학습하면서 정리한 내용입니다.

잘못된 내용이 있을 경우 알려주시면 확인 후 수정 및 반영하도록 하겠습니다.

 

오늘도 감사합니다.(__)>