오늘은 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 구조체에 딱딱 맞게 데이터가 들어오게 됩니다. 받은 값은 상황에 맞에 처리를 하시면 됩니다.
'프로그램 > C++' 카테고리의 다른 글
vc++에서 간단히 사용헐 수 있는 html 파싱 dll (0) | 2021.01.11 |
---|---|
[MFC] 유니코드 멀티바이트 UTF-8 문자열 인코딩 변환 모음 (0) | 2021.01.10 |
Sleep 을 대신할 수 있는 Wait 함수 (0) | 2021.01.10 |
VS2010 인텔리센스 에러 /MD _AFXDLL (0) | 2021.01.10 |
미리 컴파일된 헤더 사용시 폴더위치가 다른 곳에서 에러 안나고 쓰는 방법 (1) | 2021.01.10 |