|
메시지 필터를 이용하여 F1, F2, F3 .. 키 입력을 후킹하기.
public class MessageFilter : System.Windows.Forms.IMessageFilter
{
public bool PreFilterMessage(ref Message m)
{
switch(m.Msg)
{
case 256 : // WM_KEYDOWN <==== windows message 를 C# 형태로 쓰고 싶었지만.. 딱히 만들어져있는게 없더군요 그래서
// 인터넷에서 windows.h 파일을 검색해서 찾았습니다. WM_KETDOWN = 256 번이더군요.
System.Console.WirteLine(m.LParam.ToInt32()); // 이걸로 F1 부터 여러가지 키를 차례데로 눌러본 값들이
if( m.LParam.ToInt32() == 3866625 ) // F1 Key // <=== 이 값들입니다. 3866625 가 F1 이군요.. 이런식으로 Key 값을 찾아서
{ // 계속 추가하면 키보드 후킹.. 그다지 어려운건 아닐거 같군요 ^^;;
System.Console.WriteLine("F1 Press");
return true;
}
else if( m.LParam.ToInt32() == 3932161 ) // F2 Key
{
System.Console.WriteLine("F2 Press");
return true;
}
else if( m.LParam.ToInt32() == 3997697 ) // F3 Key
{
System.Console.WriteLine("F3 Press");
return true;
}
break;
}
return false;
}
}
//
// 만들어 놓은 MessageFilter 는 반드시 AddMessageFilter 메서드를 통해 추가해줘야 합니다.
// static void Main 함수는 기본 Form 에 포함되어 있습니다. :) 아시죠?
static void Main()
{
Application.AddMessageFilter(new MessageFilter());
Application.Run(new JapExamples());
}
아래 있는 것은 windows.h 파일에 정의된 windos message 들입니다. windows.h 파일은 visual studio 안에 INCLUDE_ROOT 에 있습니다.
어딘지는 아시죠?
| WA_ACTIVE |
1 |
| WA_CLICKACTIVE |
2 |
| WA_INACTIVE |
0 |
| WM_ACTIVATE |
6 |
| WM_ACTIVATEAPP |
28 |
| WM_AFXFIRST |
864 |
| WM_AFXLAST |
895 |
| WM_APP |
32768 |
| WM_ASKCBFORMATNAME |
780 |
| WM_CANCELJOURNAL |
75 |
| WM_CANCELMODE |
31 |
| WM_CAPTURECHANGED |
533 |
| WM_CHANGECBCHAIN |
781 |
| WM_CHAR |
258 |
| WM_CHARTOITEM |
47 |
| WM_CHILDACTIVATE |
34 |
| WM_CLEAR |
771 |
| WM_CLOSE |
16 |
| WM_COMMAND |
273 |
| WM_COMMNOTIFY |
68 |
| WM_COMPACTING |
65 |
| WM_COMPAREITEM |
57 |
| WM_CONTEXTMENU |
123 |
| WM_COPY |
769 |
| WM_COPYDATA |
74 |
| WM_CREATE |
1 |
| WM_CTLCOLORBTN |
309 |
| WM_CTLCOLORDLG |
310 |
| WM_CTLCOLOREDIT |
307 |
| WM_CTLCOLORLISTBOX |
308 |
| WM_CTLCOLORMSGBOX |
306 |
| WM_CTLCOLORSCROLLBAR |
311 |
| WM_CTLCOLORSTATIC |
312 |
| WM_CUT |
768 |
| WM_DEADCHAR |
259 |
| WM_DELETEITEM |
45 |
| WM_DESTROY |
2 |
| WM_DESTROYCLIPBOARD |
775 |
| WM_DEVICECHANGE |
537 |
| WM_DEVMODECHANGE |
27 |
| WM_DISPLAYCHANGE |
126 |
| WM_DRAWCLIPBOARD |
776 |
| WM_DRAWITEM |
43 |
| WM_DROPFILES |
563 |
| WM_ENABLE |
10 |
| WM_ENDSESSION |
22 |
| WM_ENTERIDLE |
289 |
| WM_ENTERMENULOOP |
529 |
| WM_ENTERSIZEMOVE |
561 |
| WM_ERASEBKGND |
20 |
| WM_EXITMENULOOP |
530 |
| WM_EXITSIZEMOVE |
562 |
| WM_FONTCHANGE |
29 |
| WM_GETDLGCODE |
135 |
| WM_GETFONT |
49 |
| WM_GETHOTKEY |
51 |
| WM_GETICON |
127 |
| WM_GETMINMAXINFO |
36 |
| WM_GETOBJECT |
61 |
| WM_GETTEXT |
13 |
| WM_GETTEXTLENGTH |
14 |
| WM_HANDHELDFIRST |
856 |
| WM_HANDHELDLAST |
863 |
| WM_HELP |
83 |
| WM_HOTKEY |
786 |
| WM_HSCROLL |
276 |
| WM_HSCROLLCLIPBOARD |
782 |
| WM_ICONERASEBKGND |
39 |
| WM_IME_CHAR |
646 |
| WM_IME_COMPOSITION |
271 |
| WM_IME_COMPOSITIONFULL |
644 |
| WM_IME_CONTROL |
643 |
| WM_IME_ENDCOMPOSITION |
270 |
| WM_IME_KEYDOWN |
656 |
| WM_IME_KEYLAST |
271 |
| WM_IME_KEYUP |
657 |
| WM_IME_NOTIFY |
642 |
| WM_IME_REQUEST |
648 |
| WM_IME_SELECT |
645 |
| WM_IME_SETCONTEXT |
641 |
| WM_IME_STARTCOMPOSITION |
269 |
| WM_INITDIALOG |
272 |
| WM_INITMENU |
278 |
| WM_INITMENUPOPUP |
279 |
| WM_INPUTLANGCHANGE |
81 |
| WM_INPUTLANGCHANGEREQUEST |
80 |
| WM_KEYDOWN |
256 |
| WM_KEYFIRST |
256 |
| WM_KEYLAST |
264 |
| WM_KEYUP |
257 |
| WM_KILLFOCUS |
8 |
| WM_LBUTTONDBLCLK |
515 |
| WM_LBUTTONDOWN |
513 |
| WM_LBUTTONUP |
514 |
| WM_MBUTTONDBLCLK |
521 |
| WM_MBUTTONDOWN |
519 |
| WM_MBUTTONUP |
520 |
| WM_MDIACTIVATE |
546 |
| WM_MDICASCADE |
551 |
| WM_MDICREATE |
544 |
| WM_MDIDESTROY |
545 |
| WM_MDIGETACTIVE |
553 |
| WM_MDIICONARRANGE |
552 |
| WM_MDIMAXIMIZE |
549 |
| WM_MDINEXT |
548 |
| WM_MDIREFRESHMENU |
564 |
| WM_MDIRESTORE |
547 |
| WM_MDISETMENU |
560 |
| WM_MDITILE |
550 |
| WM_MEASUREITEM |
44 |
| WM_MENUCHAR |
288 |
| WM_MENUCOMMAND |
294 |
| WM_MENUDRAG |
291 |
| WM_MENUGETOBJECT |
292 |
| WM_MENURBUTTONUP |
290 |
| WM_MENUSELECT |
287 |
| WM_MOUSEACTIVATE |
33 |
| WM_MOUSEFIRST |
512 |
| WM_MOUSEHOVER |
673 |
| WM_MOUSELEAVE |
675 |
| WM_MOUSEMOVE |
512 |
| WM_MOUSEWHEEL |
522 |
| WM_MOVE |
3 |
| WM_MOVING |
534 |
| WM_NCACTIVATE |
134 |
| WM_NCCALCSIZE |
131 |
| WM_NCCREATE |
129 |
| WM_NCDESTROY |
130 |
| WM_NCHITTEST |
132 |
| WM_NCLBUTTONDBLCLK |
163 |
| WM_NCLBUTTONDOWN |
161 |
| WM_NCLBUTTONUP |
162 |
| WM_NCMBUTTONDBLCLK |
169 |
| WM_NCMBUTTONDOWN |
167 |
| WM_NCMBUTTONUP |
168 |
| WM_NCMOUSEMOVE |
160 |
| WM_NCPAINT |
133 |
| WM_NCRBUTTONDBLCLK |
166 |
| WM_NCRBUTTONDOWN |
164 |
| WM_NCRBUTTONUP |
165 |
| WM_NEXTDLGCTL |
40 |
| WM_NEXTMENU |
531 |
| WM_NOTIFY |
78 |
| WM_NOTIFYFORMAT |
85 |
| WM_NULL |
0 |
| WM_PAINT |
15 |
| WM_PAINTCLIPBOARD |
777 |
| WM_PAINTICON |
38 |
| WM_PALETTECHANGED |
785 |
| WM_PALETTEISCHANGING |
784 |
| WM_PARENTNOTIFY |
528 |
| WM_PASTE |
770 |
| WM_PENWINFIRST |
896 |
| WM_PENWINLAST |
911 |
| WM_POWER |
72 |
| WM_POWERBROADCAST |
536 |
| WM_PRINT |
791 |
| WM_PRINTCLIENT |
792 |
| WM_QUERYDRAGICON |
55 |
| WM_QUERYENDSESSION |
17 |
| WM_QUERYNEWPALETTE |
783 |
| WM_QUERYOPEN |
19 |
| WM_QUEUESYNC |
35 |
| WM_QUIT |
18 |
| WM_RBUTTONDBLCLK |
518 |
| WM_RBUTTONDOWN |
516 |
| WM_RBUTTONUP |
517 |
| WM_RENDERALLFORMATS |
774 |
| WM_RENDERFORMAT |
773 |
| WM_SETCURSOR |
32 |
| WM_SETFOCUS |
7 |
| WM_SETFONT |
48 |
| WM_SETHOTKEY |
50 |
| WM_SETICON |
128 |
| WM_SETREDRAW |
11 |
| WM_SETTEXT |
12 |
| WM_SETTINGCHANGE |
26 |
| WM_SHOWWINDOW |
24 |
| WM_SIZE |
5 |
| WM_SIZECLIPBOARD |
779 |
| WM_SIZING |
532 |
| WM_SPOOLERSTATUS |
42 |
| WM_STYLECHANGED |
125 |
| WM_STYLECHANGING |
124 |
| WM_SYNCPAINT |
136 |
| WM_SYSCHAR |
262 |
| WM_SYSCOLORCHANGE |
21 |
| WM_SYSCOMMAND |
274 |
| WM_SYSDEADCHAR |
263 |
| WM_SYSKEYDOWN |
260 |
| WM_SYSKEYUP |
261 |
| WM_TCARD |
82 |
| WM_TIMECHANGE |
30 |
| WM_TIMER |
275 |
| WM_UNDO |
772 |
| WM_UNINITMENUPOPUP |
293 |
| WM_USER |
1024 |
| WM_USERCHANGED |
84 |
| WM_VKEYTOITEM |
46 |
| WM_VSCROLL |
277 |
| WM_VSCROLLCLIPBOARD |
778 |
| WM_WINDOWPOSCHANGED |
71 |
| WM_WINDOWPOSCHANGING |
70 |
| WM_WININICHANGE |
26 |
|
댓글