'MessageFilter'에 해당되는 글 1건

  1. 2010.07.28 메시지 후킹 하는 방법 1
C#2010. 7. 28. 18:10

IMessageFilter를 이용한 키보드 입력을 메시지 후킹하는 방법 입니다.

#. ex.
//IMessageFilter를 상속받는 클래스를 생성합니다.
public class MessageFilter : System.Windows.Forms.IMessageFilter
    {
        public bool PreFilterMessage(ref Message m)
        {
            switch(m.Msg)
            {
                //windows message를 사용하고 싶지만 만들어져 있는게 없는 관계로 winuser.h파일을 검색하여 찾았습니다.
                //WM_KEYDOWN = 256 번 입니다.
                case 256: // WM_KEYDOWN
                    //이 메시지를 통해 각 키들을 눌러본 결과
                    MessageBox.Show(m.LParam.ToInt32().ToString());

                    if( m.LParam.ToInt32() == 3866625 ) // F1 Key           
                    {
                        MessageBox.Show("현재 클릭한 버튼은 F1 입니다.");
                        return false;
                    }
                    else if( m.LParam.ToInt32() == 1048577) //Q
                    {
                        MessageBox.Show("현재 클릭한 버튼은 Q 입니다.");
                        return true;
                    }
                    else if( m.LParam.ToInt32() == 196609)  //2
                    {
                        MessageBox.Show("현재 클릭한 버튼은 2 입니다.");
                        return true;
                    }
                    break;
            }
            return false;
        }
    }


//적용하고자 하는 App의 생성자에 아래 내용을 입력합니다.
MessageFilter msgFilter = new MessageFilter();
Application.AddMessageFilter(msgFilter); //만들어 놓은 MessageFilter는 반드시 AddMessageFilter 메소드를 통해 추가해야 합니다.

#. 특징.
 - m.Msg를 통해 이벤트의 종류를 알아보고 그것에 대한 상세처리를 하단에서 하는 구조입니다.
 - return 값은 true와 false가 있습니다.
  -> true의 경우 메시지 후킹 후 현재 포커스된 컨트롤에게 해당 메시지를 보내줍니다.
  -> false의 경우 메시지 후킹 후 현재 포커스된 컨트롤에게 해당 메시지를 보내지 않습니다.

출처: 데브피아

Posted by 쿵캉켕