C#에서 메시지를 보내고 받는 방법에 대한 예제 자료입니다. 다음과 같은 목차로 진행하도록 하겠습니다. 😘
- Windows Message
- Post Message (Send)
- Receive Message(WndProc callback function)
Windows Message
Windows Message는 user32.dll을 이용하여 윈도우 오브젝트 간 통신을 할 수 있도록 지원하는 기능입니다.
이번 예제는 PostMessage 함수를 이용하여 메시지를 주고받아보겠습니다.
Post Message (Send)
Send Message 함수도 있는데, 이번 예제는 PostMessage로 하겠습니다.
- HWnd : 윈도우 창의 메모리 주소입니다(리소스의 메모리 어드레스) 예제는 ReceiveBeomSang 윈도우를 찾습니다.
- WParam : Word 매개변수입니다. 예시는 0을 전달합니다.
- LParam : Long 매개변수입니다. 예시는 12345678을 전달합니다.
public partial class SendBeomSang : Form
{
const int WM_USER = 1024;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr FindWindow(string className, string windowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
public SendBeomSang()
{
InitializeComponent();
Post();
}
private void Post()
{
Message handle = new Message();
handle.HWnd = FindWindow(null, "ReceiveBeomSang");
handle.WParam = (IntPtr)0;
handle.LParam = (IntPtr)(12345678);
PostMessage(handle.HWnd, WM_USER, handle.WParam, handle.LParam);
}
private void btnPost_Click(object sender, EventArgs e)
{
Post();
}
}
Receive Message(WndProc callback function)
Send 반대말이 무엇일까 하다가 Receive로 임의로 이름을 붙였습니다.
WndProc 콜백 함수를 오버라이드 합니다.
값을 전달받으면 핸들, 메시지, 파라미터를 메시지박스로 표시하였습니다.
public partial class ReceiveBeomSang : Form
{
const int WM_USER = 1024;
public ReceiveBeomSang()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_USER)
{
Debug.WriteLine($"h={m.HWnd}, msg={m.Msg}, wP={m.WParam}, lP={m.LParam}");
MessageBox.Show($"h={m.HWnd}, msg={m.Msg}, wP={m.WParam}, lP={m.LParam}");
}
base.WndProc(ref m);
}
}