C#拦截系统消息的方法Application.AddMessageFilter
C#拦截系统消息的方法Application.AddMessageFilter Application.AddMessageFilter这个方法可以接收系统发出的消息: 首先定义一个类,继承IMessageFilter接口代码如下:
internal class MyMessager : IMessageFilter
{
//截取消息,进行处理
public bool PreFilterMessage(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
case 513: //拦截左键单击事件
MessageBox.Show("左键被拦截!"); return true;
case 516: //拦截左键单击事件
MessageBox.Show("右键被拦截!");
return true;
default: return false; //返回false则消息未被裁取,系统会处理
}
}
} 然后在窗体load事件中加入Application.AddMessageFilter方法
private void Form1_Load(object sender, EventArgs e)
{
Application.AddMessageFilter(new MyMessager());
}
以上转自:http://www.cnblogs.com/whtydn/archive/2009/04/30/1447117.html
此方法并不能够调用全部的消息,可能只调用线程消息序列的,具体没搞明白,可参考http://www.eggheadcafe.com/software/aspnet/32211162/not-getting-all-window-messages-from-imessagefilter.aspx
所以建议使用WndProc() 重载,MessageFilter 在MSDN上还有说会降低效率的。
下面
附消息:
internalenum WindowsMessages
{
WM_ACTIVATE =0x6,
WM_ACTIVATEAPP =0x1C,
WM_AFXFIRST =0x360,
WM_AFXLAST =0x37F,
WM_APP =0x8000,
WM_ASKCBFORMATNAME =0x30C,
WM_CANCELJOURNAL =0x4B,
WM_CANCELMODE =0x1F,
WM_CAPTURECHANGED =0x215, WM_CHANGECBCHAIN =0x30D,
WM_CHAR =0x102, WM_CHARTOITEM =0x2F,
WM_CHILDACTIVATE =0x22, WM_CLEAR =0x303,
WM_CLOSE =0x10, WM_COMMAND =0x111,
WM_COMPACTING =0x41, WM_COMPAREITEM =0x39,
WM_CONTEXTMENU =0x7B, WM_COPY =0x301,
WM_COPYDATA =0x4A, WM_CREATE =0x1,
WM_CTLCOLORBTN =0x135, WM_CTLCOLORDLG =0x136,
WM_CTLCOLOREDIT =0x133, WM_CTLCOLORLISTBOX =0x134,
WM_CTLCOLORMSGBOX =0x132, WM_CTLCOLORSCROLLBAR =0x137,
WM_CTLCOLORSTATIC =0x138, WM_CUT =0x300,
WM_DEADCHAR =0x103, WM_DELETEITEM =0x2D,
WM_DESTROY =0x2, WM_DESTROYCLIPBOARD =0x307,
WM_DEVICECHANGE =0x219, WM_DEVMODECHANGE =0x1B,
WM_DISPLAYCHANGE =0x7E, WM_DRAWCLIPBOARD =0x308,
WM_DRAWITEM =0x2B, WM_DROPFILES =0x233, WM_ENABLE =0xA,
WM_ENDSESSION =0x16, WM_ENTERIDLE =0x121,
WM_ENTERMENULOOP =0x211, WM_ENTERSIZEMOVE =0x231,
WM_ERASEBKGND =0x14, WM_EXITMENULOOP =0x212,
WM_EXITSIZEMOVE =0x232, WM_FONTCHANGE =0x1D,
WM_GETDLGCODE =0x87, WM_GETFONT =0x31,
WM_GETHOTKEY =0x33, WM_GETICON =0x7F,
WM_GETMINMAXINFO =0x24, WM_GETOBJECT =0x3D,
WM_GETSYSMENU =0x313, WM_GETTEXT =0xD,
WM_GETTEXTLENGTH =0xE, WM_HANDHELDFIRST =0x358,
WM_HANDHELDLAST =0x35F, WM_HELP =0x53,
WM_HOTKEY =0x312, WM_HSCROLL =0x114,
WM_HSCROLLCLIPBOARD =0x30E, WM_ICONERASEBKGND =0x27,
WM_IME_CHAR =0x286, WM_IME_COMPOSITION =0x10F,
WM_IME_COMPOSITIONFULL =0x284, WM_IME_CONTROL =0x283,
WM_IME_ENDCOMPOSITION =0x10E, WM_IME_KEYDOWN =0x290,
WM_IME_KEYLAST =0x10F, WM_IME_KEYUP =0x291,
WM_IME_NOTIFY =0x282, WM_IME_REQUEST =0x288,
WM_IME_SELECT =0x285, WM_IME_SETCONTEXT =0x281,
WM_IME_STARTCOMPOSITION =0x10D, WM_INITDIALOG =0x110,
WM_INITMENU =0x116, WM_INITMENUPOPUP =0x117,
WM_INPUTLANGCHANGE =0x51, WM_INPUTLANGCHANGEREQUEST =0x50,
WM_KEYDOWN =0x100, WM_KEYFIRST =0x100,
WM_KEYLAST =0x108, WM_KEYUP =0x101,
WM_KILLFOCUS =0x8, WM_LBUTTONDBLCLK =0x203,
WM_LBUTTONDOWN =0x201, WM_LBUTTONUP =0x202,
WM_MBUTTONDBLCLK =0x209, WM_MBUTTONDOWN =0x207,
WM_MBUTTONUP =0x208, WM_MDIACTIVATE =0x222,
WM_MDICASCADE =0x227, WM_MDICREATE =0x220,
WM_MDIDESTROY =0x221, WM_MDIGETACTIVE =0x229,
WM_MDIICONARRANGE =0x228, WM_MDIMAXIMIZE =0x225,
WM_MDINEXT =0x224, WM_MDIREFRESHMENU =0x234,
WM_MDIRESTORE =0x223,
WM_MDISETMENU =0x230, WM_MDITILE =0x226,
WM_MEASUREITEM =0x2C, WM_MENUCHAR =0x120,
WM_MENUCOMMAND =0x126, WM_MENUDRAG =0x123,
WM_MENUGETOBJECT =0x124, WM_MENURBUTTONUP =0x122,
WM_MENUSELECT =0x11F, WM_MOUSEACTIVATE =0x21,
WM_MOUSEFIRST =0x200, WM_MOUSEHOVER =0x2A1,
WM_MOUSELAST =0x20A, WM_MOUSELEAVE =0x2A3,
WM_MOUSEMOVE =0x200, WM_MOUSEWHEEL =0x20A,
WM_MOVE =0x3, WM_MOVING =0x216, WM_NCACTIVATE =0x86,
WM_NCCALCSIZE =0x83, WM_NCCREATE =0x81,
WM_NCDESTROY =0x82, WM_NCHITTEST =0x84,
WM_NCLBUTTONDBLCLK =0xA3, WM_NCLBUTTONDOWN =0xA1,
WM_NCLBUTTONUP =0xA2, WM_NCMBUTTONDBLCLK =0xA9,
WM_NCMBUTTONDOWN =0xA7, WM_NCMBUTTONUP =0xA8,
WM_NCMOUSEHOVER =0x2A0, WM_NCMOUSELEAVE =0x2A2,
WM_NCMOUSEMOVE =0xA0, WM_NCPAINT =0x85,
WM_NCRBUTTONDBLCLK =0xA6, WM_NCRBUTTONDOWN =0xA4,
WM_NCRBUTTONUP =0xA5, WM_NEXTDLGCTL =0x28, WM_NEXTMENU =0x213,
WM_NOTIFY =0x4E, WM_NOTIFYFORMAT =0x55, WM_NULL =0x0,
WM_PAINT =0xF, WM_PAINTCLIPBOARD =0x309, WM_PAINTICON =0x26,
WM_PALETTECHANGED =0x311, WM_PALETTEISCHANGING =0x310,
WM_PARENTNOTIFY =0x210, WM_PASTE =0x302, WM_PENWINFIRST =0x380,
WM_PENWINLAST =0x38F, WM_POWER =0x48, WM_PRINT =0x317,
WM_PRINTCLIENT =0x318, WM_QUERYDRAGICON =0x37, WM_QUERYENDSESSION =0x11,
WM_QUERYNEWPALETTE =0x30F, WM_QUERYOPEN =0x13, WM_QUERYUISTATE =0x129,
WM_QUEUESYNC =0x23, WM_QUIT =0x12, WM_RBUTTONDBLCLK =0x206,
WM_RBUTTONDOWN =0x204, WM_RBUTTONUP =0x205, WM_RENDERALLFORMATS =0x306,
WM_RENDERFORMAT =0x305, WM_SETCURSOR =0x20, WM_SETFOCUS =0x7,
WM_SETFONT =0x30, WM_SETHOTKEY =0x32, WM_SETICON =0x80, WM_SETREDRAW =0xB,
WM_SETTEXT =0xC, WM_SETTINGCHANGE =0x1A, WM_SHOWWINDOW =0x18,
WM_SIZE =0x5, WM_SIZECLIPBOARD =0x30B, WM_SIZING =0x214,
WM_SPOOLERSTATUS =0x2A, WM_STYLECHANGED =0x7D, WM_STYLECHANGING =0x7C,
WM_SYNCPAINT =0x88, WM_SYSCHAR =0x106, WM_SYSCOLORCHANGE =0x15,
WM_SYSCOMMAND =0x112, WM_SYSDEADCHAR =0x107, WM_SYSKEYDOWN =0x104,
WM_SYSKEYUP =0x105, WM_SYSTIMER =0x118,
WM_TCARD =0x52, WM_TIMECHANGE =0x1E, WM_TIMER =0x113,
WM_UNDO =0x304, WM_UNINITMENUPOPUP =0x125, WM_USER =0x400,
WM_USERCHANGED =0x54, WM_VKEYTOITEM =0x2E, WM_VSCROLL =0x115,
WM_VSCROLLCLIPBOARD =0x30A, WM_WINDOWPOSCHANGED =0x47,
WM_WINDOWPOSCHANGING =0x46, WM_WININICHANGE =0x1A,
WM_XBUTTONDBLCLK =0x20D, WM_XBUTTONDOWN =0x20B, WM_XBUTTONUP =0x20C
}