군대에서 심심풀이로 코딩 연습하는데 만들다 보니까 특정 동작을 무시해야 하는 코드가 필요했다. 책을 보니 메시지 필터(MessageFilter)를 이용하면 된다더라. 그래서 특정 동작이 어떤 메시지를 전달하는지 알아보기 위해 전달 받은 모든 메시지를 출력하는 프로그램을 만들어 봤다. (군대가 아니었다면 그냥 어떤 메시지인지 검색하면 끝날 일이지만...)

참고로 "뇌를 자극하는 C# 5.0 프로그래밍" 책에 있는 예제 코드이다. 살짝 다르지만...

msgfilter.cs


using System;
using System.Windows.Forms;

namespace MessageFilter
{
	class MessageFilter : IMessageFilter
	{
		public bool PreFilterMessage(ref Message m)
		{
			if (m.Msg == 0xF || m.Msg == 0x113 || m.Msg == 0x200 || m.Msg == 0xA0)	// 0xF=WM_PAINT, 0x113=WM_TIMER, 0x200=WM_MOUSEMOVE, 0xA0=WM_NCMOUSEMOVE
				return false;
			Console.WriteLine("{0} : {1}", m.ToString(), m.Msg);
			return true;
		}
	}

	class MainApp : Form
	{
		static void Main(string[] args)
		{
			MainApp form = new MainApp();
			Application.AddMessageFilter(new MessageFilter());
			Application.Run(form);
		}
	}
}

WM_PAINT(0xF), WM_TIMER(0x113), WM_MOUSEMOVE(0x200), WM_NCMOUSEMOVE(0xA0)는 하도 많이 떠서 안 뜨도록 했다. 보고 싶으면 10번 줄을 수정하면 된다.

msgfilter.exe

'프로그래밍 > C#' 카테고리의 다른 글

[WinForm] 모든 메시지 출력  (0) 2018.11.06

+ Recent posts