본문 바로가기
VisualStudio.C++.C#/코딩팁,함수활용,단편

다른 프로그램과 메시지 송수신. - RegisterWindowMessage

by i.got.it 2015. 6. 5.

 

 

 

개요

   

보통 메시지(SendMessage, PostMessage) 는 1개의 프로그램내에서 주로 사용되나, 서로다른 프로그램간에도 메시지 송수신 가능하다.

본 글에서는 다른 프로그램간의 메시시 송수신 방법 정리한다. 

 

구현방법 요점.

2개의 프로그램이 있다고 하고, 각각을 A, B 라고 하자.

메시지 전송함수 SendMessage/PostMessage 모두 사용가능하며 본 글에서는 SendMessage 를 예로 보이나, 설명중의 SendMessage는 PostMessage 로 대치가능하다.

 

1. A,B 모두에 RegisterWindowMessage 함수 호출한다.

- 메시지를 등록하는 함수이며 이렇게 등록된 메시지는 다른 프로그램으로도 전달가능하다.

- 함수의 인자로 임의 문자열을 기록하는데, 이 문자열이 동일한 프로그램끼리 메시시 전달이 가능하다.

- 이 함수 반환값을 받아둬서 SendMessage 함수 호출시 인자로 전달해야함.

 

2. 메시지 전송할 측에서 SendMessage 호출

- 인자로 상기1에서의 함수 반환값을 인자로 전달.

 

3. 메시시 수신하는 측에서는 ON_REGISTERED_MESSAGE 매크로 이용.

- 본 매크로 이용하여 메시지 핸들러 함수를 연결시키게된다.

- 메시지 핸들러 함수 구현.

 

본 방식의 메시지 송수신 단점.

메시지 전송함수는 특정 프로그램의 윈도우로만 전송하지 않고, 모든 윈도우에 전송하기 때문에 SendMessage 함수 호출후 3~5초 정도의 시간이 지나야 리턴되어 고속 즉시 전송의 용도로는 제한적임.

 

다른 프로그램과의 메시지를 고속,즉시 전송 달성하기 위해서는 상대방 윈도우 핸들을 함수 FindWindow 로 확보하여 SendMessage 함수 호출시 메시지 수신대상 윈도우를 지정하는 방식으로 하면 된다. 방법 상세보기 -> http://igotit.tistory.com/319

 

 

 

 

 

 

 

 

구현 코드예.

 

개요에서의 구현과정 요점에 보인대로 구현된 코드예를 보인다.

메시지 전송할 프로그램을 A, 수신처리할 프로그램을 B라고 하면 각각의 프로그램엔 아래와 같은 구조로 코딩되면 된다.

 

아래 코드에서 붉은색 문자열은 프로그램 A,B에서 동일하게 해야한다.

 

프로그램 A - 메시지 송신측. 

 프로그램 B - 메시지 수신측.

 

stdafx.h등에서

static const UINT MsgRegi_1 = ::RegisterWindowMessage(_T("MsgRegi_MyProgram"));

 

 

//메시지전송

 ::SendMessage(HWND_BROADCAST, MsgRegi_1,wpara,lpara);

 

 

 

 

 

 

 

 

 

 

 

stdafx.h등에서

static const UINT MsgRegi_1 = ::RegisterWindowMessage(_T("MsgRegi_MyProgram"));

 

 

BEGIN_MESSAGE_MAP의 끝에,(END_MESSAGE_MAP 앞에)

ON_REGISTERED_MESSAGE(MsgRegi_1,OnMsgRegi_1)

 

메시지핸들러 구현.

 

.h 에서 선언.

afx_msg LRESULT OnMsgRegi_1(WPARAM wParam,LPARAM lParam);

.cpp 에서 정의.

LRESULT CMyclass::OnMsgRegi_1(WPARAM wpara,LPARAM lpara )

{

 

 // 여기서 메시지 수신시 처리할 내용 코딩.

 

 return 0L;

}

 

 

 

 

 

 

 

 본 글이 포함된 상위 정리 장소.

 

 Visual Studio/VC++/C/C# 활용정리 -> http://igotit.tistory.com/11

 

 

///318.

 

 

댓글



 

비트코인




암호화폐       외환/나스닥/골드       암호화폐/외환/나스닥/골드 암호화폐/외환/나스닥/골드   암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)     롤오버 이자 없는 스왑프리계좌
( 스왑프리 암호화폐도 거래 가능 )    
MT4, MT5 , cTrader 모두 지원     FTMO 계좌 매매운용. MT4,MT5