프로그램/C++

WM_COPYDATA 사용하기 ( OnCopyData )

네오류이 2021. 1. 10. 13:04
728x90
반응형

오늘은 C++에서 옛날에는 사용을 많이 하였던 WM_COPYDATA 의 사용법에 대해 설명하고자 합니다.

 

작업은 6.0 기준입니다.

 

WM_COPYDATA 는 서로 다른 응용프로그램 간에 데이터 통신을 하기 위해서 사용을 합니다. 

 

단, win7 이상 같은 경우는 관리자권한으로 실행이 되어야 하고, 또는 사용자계정컨트롤이 사용안함으로 되어 있어야 통신이 가능합니다.

 

권한이 없으면 전송 시 권한에 의해 전달 또는 수신이 되지 않습니다.

 

통상 일반 개인 유저를 상대로 하는 PC에서는 사용하지 않으며.. 솔류션기반 또는 전문적으로 사용하는 PC에서 사용을 합니다.

 

예전에는 정말 많이 사용하던 방식 중에 하나였습니다.

 

 

* 소스코드 (전송)

 

// int parm_message_type : 메세지ID

// char *parm_data : 전송할 프로토콜

// int parm_size : 전송할 크기

int CDlg::SendDataMessage(int parm_message_type, char *parm_data, int parm_size)

{

int return_value = 0;

HWND is_des_hwnd = ::FindWindow(_T("대상클래스"), NULL);

 

if(is_des_hwnd != NULL){

char *p_buffer =new char[parm_size+1];

memset(p_buffer, 0, parm_size+1);

if(p_buffer != NULL){

memcpy(p_buffer, parm_data, parm_size);

COPYDATASTRUCT tip;

tip.dwData = parm_message_type;

tip.cbData = parm_size;

tip.lpData = p_buffer;

return_value = ::SendMessage(is_des_hwnd, WM_COPYDATA, (WPARAM)this->m_hWnd, (LPARAM)&tip);

delete p_buffer; p_buffer = NULL;

}

}

 

return return_value;

}

 

// 전송~~

SendDataMessage(200001, "ABCD", 4);

 

 

* 소스코드 (수신)

 

// 클래스위저드로 WM_COPYDATA 를 선택해야 합니다. 그래야 기본 코드가 생성이 됩니다.

 

 

BOOL CDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) 

{

COPYDATASTRUCT *p_tip = pCopyDataStruct;

CString is_parm = (char *)p_tip->lpData;

CStringArray str_array;

 

if(p_tip->dwData == 200001){ // 메세지 번호

AfxMessageBox(is_parm);

  }

 

return CDialog::OnCopyData(pWnd, pCopyDataStruct);

}

 

 

수신 값은 COPYDATASTRUCT 구조체에 딱딱 맞게 데이터가 들어오게 됩니다. 받은 값은 상황에 맞에 처리를 하시면 됩니다.

 

 

 

728x90
반응형