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의 경우 메시지 후킹 후 현재 포커스된 컨트롤에게 해당 메시지를 보내지 않습니다.
출처: 데브피아
'Message Hooking'에 해당되는 글 1건
- 2010.07.28 메시지 후킹 하는 방법 1
C#2010. 7. 28. 18:10