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

다른 프로그램과 메시지 송수신 - FindWindow이용 대상윈도우핸들로 직접 전송.

by 리치굿맨 2015. 6. 6.

 

 

개요

 

서로 다른 프로그램간의 메시지 송수신을 위하여 메시지 전송대상 윈도우 핸들을 함수 FindWindow 이용하여 확보하고  

메시지 전송하는 방법 정리.

 

간단히 2단계로 이뤄진다.

1. FindWindow 로 메시지 타겟 윈도우 핸들 받기.

2. 1에서 확보된 윈도우 핸들로 SendMessage/PostMessage  함수 이용 메시지 전송.

 

타 방법 비교 : 다른 프로그램간의 메시지 송수신 방식중  RegisterWindowsMessage 함수 이용하는 방식(보기 -> http://igotit.tistory.com/318 ) 대비 본 글에서의 설명하는 방식이 고속/즉시 전송이 가능하다.

 

 

 

 

 

구현코드예

 

 

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

 

아래 코딩예에서는 WM_USER+1로 정의된 사용자정의 메시지를 전송하는 예이다. 

 

시스템 메시지 전송하고 싶은 경우 (예를들어 WM_CLOSE 같은것.)

프로그램 A에서 ::SendMessage(hwnd,WM_CLOSE,0,0);  로 하고, 프로그램 B측엔 별도의 처리를 하지 않아도 프로그래B는 메시지 수신시 종료되게 된다.

 

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

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

 

 

 HWND hwnd = ::FindWindow(NULL,"프로그램 B");

 ::SendMessage(hwnd,WM_USER+1,0,0); 

 

혹은 아래 코드도 동일효과임.

 

CWnd *cwnd = FindWindow(NULL,"프로그램 B");

cwnd->SendMessage(WM_USER+1,0,0);

 

 

 

 

BEGIN_MESSAGE_MAP의 끝에,(END_MESSAGE_MAP 앞에)

ON_MESSAGE(WM_USER+1,OnMsg)

 

메시지핸들러 구현.

 

.h 에서 선언.

afx_msg LRESULT OnMsg(WPARAM wParam,LPARAM lParam);

.cpp 에서 정의.

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

{

 

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

 

 return 0L;

}

 

 

 

 

 

 

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

 

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

 

 

///319.

태그

댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT