函數(shù)功能:該函數(shù)將指定的消息發(fā)送到一個(gè)或多個(gè)窗口。此函數(shù)為指定的窗口調(diào)用窗口程序,直到窗口程序處理完消息再返回。該函數(shù)是應(yīng)用程序和應(yīng)用程序之間進(jìn)行消息傳遞的主要手段之一。
函數(shù)原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);
參數(shù):
hWnd:其窗口程序?qū)⒔邮障⒌拇翱诘木浔H绻藚?shù)為HWND_BROADCAST,則消息將被發(fā)送到系統(tǒng)中所有頂層窗口,包括無效或不可見的非自身擁有的窗口、被覆蓋的窗口和彈出式窗口,但消息不被發(fā)送到子窗口。
Msg:指定被發(fā)送的消息。
wParam:指定附加的消息指定信息。
IParam:指定附加的消息指定信息。
返回值:返回值指定消息處理的結(jié)果,依賴于所發(fā)送的消息。
備注:需要用HWND_BROADCAST通信的應(yīng)用程序應(yīng)當(dāng)使用函數(shù)RegisterWindowMessage來為應(yīng)用程序間的通信取得一個(gè)唯一的消息。
如果指定的窗口是由調(diào)用線程創(chuàng)建的,則窗口程序立即作為子程序調(diào)用。如果指定的窗口是由不同線程創(chuàng)建的,則系統(tǒng)切換到該線程并調(diào)用恰當(dāng)?shù)拇翱诔绦?。線程間的消息只有在線程執(zhí)行消息檢索代碼時(shí)才被處理。發(fā)送線程被阻塞直到接收線程處理完消息為止。
C#中使用該函數(shù)首先導(dǎo)入命名空間:
using System.Runtime.InteropServices;
然后寫API引用部分的代碼,放入 class 內(nèi)部
[DllImport("user32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
這個(gè)函數(shù)有四個(gè)參數(shù),第一個(gè)是窗口句柄,窗口可以是任何類型的屏幕對象;第二個(gè)是用于區(qū)別其他消息的常量值;第三個(gè)通常是一個(gè)與消息有關(guān)的常量值,也可能是窗口或控件的句柄,第三個(gè)參數(shù)是可選參數(shù),有的消息要,有的不需要,比如單擊就不需要這個(gè)參數(shù),
別的消息,比如鼠標(biāo)移動(dòng)的可能需要在這里加上一些鼠標(biāo)的參數(shù);第四個(gè)通常是一個(gè)指向內(nèi)存中數(shù)據(jù)的指針。在C#中消息需要定義成windows系統(tǒng)中的原始的16進(jìn)制數(shù)字,比如 const int WM_Lbutton = 0x201; //定義了鼠標(biāo)的左鍵點(diǎn)擊消息。詳細(xì)值在最后。
例如:
const int BM_CLICK = 0xF5;IntPtr maindHwnd = FindWindow(null, "QQ用戶登錄"); //獲得QQ登陸框的句柄if (maindHwnd != IntPtr.Zero){ IntPtr childHwnd = FindWindowEx(maindHwnd, IntPtr.Zero, null, "登錄"); //獲得按鈕的句柄 if (childHwnd != IntPtr.Zero) { SendMessage(childHwnd, BM_CLICK, 0, 0); //發(fā)送點(diǎn)擊按鈕的消息 } else { MessageBox.Show("沒有找到子窗口"); }}else{ MessageBox.Show("沒有找到窗口");}
wMsg參數(shù)常量值:
//創(chuàng)建一個(gè)窗口
const int WM_CREATE = 0x01;
//當(dāng)一個(gè)窗口被破壞時(shí)發(fā)送
const int WM_DESTROY = 0x02;
//移動(dòng)一個(gè)窗口
const int WM_MOVE = 0x03;
//改變一個(gè)窗口的大小
const int WM_SIZE = 0x05;
//一個(gè)窗口被激活或失去激活狀態(tài)
const int WM_ACTIVATE = 0x06;
//一個(gè)窗口獲得焦點(diǎn)
const int WM_SETFOCUS = 0x07;
//一個(gè)窗口失去焦點(diǎn)
const int WM_KILLFOCUS = 0x08;
//一個(gè)窗口改變成Enable狀態(tài)
const int WM_ENABLE = 0x0A;
//設(shè)置窗口是否能重畫
const int WM_SETREDRAW = 0x0B;
//應(yīng)用程序發(fā)送此消息來設(shè)置一個(gè)窗口的文本
const int WM_SETTEXT = 0x0C;
//應(yīng)用程序發(fā)送此消息來復(fù)制對應(yīng)窗口的文本到緩沖區(qū)
const int WM_GETTEXT = 0x0D;
//得到與一個(gè)窗口有關(guān)的文本的長度(不包含空字符)
const int WM_GETTEXTLENGTH = 0x0E;
//要求一個(gè)窗口重畫自己
const int WM_PAINT = 0x0F;
//當(dāng)一個(gè)窗口或應(yīng)用程序要關(guān)閉時(shí)發(fā)送一個(gè)信號
const int WM_CLOSE = 0x10;
//當(dāng)用戶選擇結(jié)束對話框或程序自己調(diào)用ExitWindows函數(shù)
const int WM_QUERYENDSESSION = 0x11;
//用來結(jié)束程序運(yùn)行
const int WM_QUIT = 0x12;
//當(dāng)用戶窗口恢復(fù)以前的大小位置時(shí),把此消息發(fā)送給某個(gè)圖標(biāo)
const int WM_QUERYOPEN = 0x13;
//當(dāng)窗口背景必須被擦除時(shí)(例在窗口改變大小時(shí))
const int WM_ERASEBKGND = 0x14;
//當(dāng)系統(tǒng)顏色改變時(shí),發(fā)送此消息給所有頂級窗口
const int WM_SYSCOLORCHANGE = 0x15;
//當(dāng)系統(tǒng)進(jìn)程發(fā)出WM_QUERYENDSESSION消息后,此消息發(fā)送給應(yīng)用程序,通知它對話是否結(jié)束
const int WM_ENDSESSION = 0x16;
//當(dāng)隱藏或顯示窗口是發(fā)送此消息給這個(gè)窗口
const int WM_SHOWWINDOW = 0x18;
//發(fā)此消息給應(yīng)用程序哪個(gè)窗口是激活的,哪個(gè)是非激活的
const int WM_ACTIVATEAPP = 0x1C;
//當(dāng)系統(tǒng)的字體資源庫變化時(shí)發(fā)送此消息給所有頂級窗口
const int WM_FONTCHANGE = 0x1D;
//當(dāng)系統(tǒng)的時(shí)間變化時(shí)發(fā)送此消息給所有頂級窗口
const int WM_TIMECHANGE = 0x1E;
//發(fā)送此消息來取消某種正在進(jìn)行的摸態(tài)(操作)
const int WM_CANCELMODE = 0x1F;
//如果鼠標(biāo)引起光標(biāo)在某個(gè)窗口中移動(dòng)且鼠標(biāo)輸入沒有被捕獲時(shí),就發(fā)消息給某個(gè)窗口
const int WM_SETCURSOR = 0x20;
//當(dāng)光標(biāo)在某個(gè)非激活的窗口中而用戶正按著鼠標(biāo)的某個(gè)鍵發(fā)送此消息給//當(dāng)前窗口
const int WM_MOUSEACTIVATE = 0x21;
//發(fā)送此消息給MDI子窗口//當(dāng)用戶點(diǎn)擊此窗口的標(biāo)題欄,或//當(dāng)窗口被激活,移動(dòng),改變大小
const int WM_CHILDACTIVATE = 0x22;
//此消息由基于計(jì)算機(jī)的訓(xùn)練程序發(fā)送,通過WH_JOURNALPALYBACK的hook程序分離出用戶輸入消息
const int WM_QUEUESYNC = 0x23;
//此消息發(fā)送給窗口當(dāng)它將要改變大小或位置
const int WM_GETMINMAXINFO = 0x24;
//發(fā)送給最小化窗口當(dāng)它圖標(biāo)將要被重畫
const int WM_PAINTICON = 0x26;
//此消息發(fā)送給某個(gè)最小化窗口,僅//當(dāng)它在畫圖標(biāo)前它的背景必須被重畫
const int WM_ICONERASEBKGND = 0x27;
//發(fā)送此消息給一個(gè)對話框程序去更改焦點(diǎn)位置
const int WM_NEXTDLGCTL = 0x28;
//每當(dāng)打印管理列隊(duì)增加或減少一條作業(yè)時(shí)發(fā)出此消息
const int WM_SPOOLERSTATUS = 0x2A;
//當(dāng)button,combobox,listbox,menu的可視外觀改變時(shí)發(fā)送
const int WM_DRAWITEM = 0x2B;
//當(dāng)button, combo box, list box, list view control, or menu item 被創(chuàng)建時(shí)
const int WM_MEASUREITEM = 0x2C;
//此消息有一個(gè)LBS_WANTKEYBOARDINPUT風(fēng)格的發(fā)出給它的所有者來響應(yīng)WM_KEYDOWN消息
const int WM_VKEYTOITEM = 0x2E;
//此消息由一個(gè)LBS_WANTKEYBOARDINPUT風(fēng)格的列表框發(fā)送給他的所有者來響應(yīng)WM_CHAR消息
const int WM_CHARTOITEM = 0x2F;
//當(dāng)繪制文本時(shí)程序發(fā)送此消息得到控件要用的顏色
const int WM_SETFONT = 0x30;
//應(yīng)用程序發(fā)送此消息得到當(dāng)前控件繪制文本的字體
const int WM_GETFONT = 0x31;
//應(yīng)用程序發(fā)送此消息讓一個(gè)窗口與一個(gè)熱鍵相關(guān)連
const int WM_SETHOTKEY = 0x32;
//應(yīng)用程序發(fā)送此消息來判斷熱鍵與某個(gè)窗口是否有關(guān)聯(lián)
const int WM_GETHOTKEY = 0x33;
//此消息發(fā)送給最小化窗口,當(dāng)此窗口將要被拖放而它的類中沒有定義圖標(biāo),應(yīng)用程序能返回一個(gè)圖標(biāo)或光標(biāo)的句柄,當(dāng)用戶拖放圖標(biāo)時(shí)系統(tǒng)顯示這個(gè)圖標(biāo)或光標(biāo)
const int WM_QUERYDRAGICON = 0x37;
//發(fā)送此消息來判定combobox或listbox新增加的項(xiàng)的相對位置
const int WM_COMPAREITEM = 0x39;
//顯示內(nèi)存已經(jīng)很少了
const int WM_COMPACTING = 0x41;
//發(fā)送此消息給那個(gè)窗口的大小和位置將要被改變時(shí),來調(diào)用setwindowpos函數(shù)或其它窗口管理函數(shù)
const int WM_WINDOWPOSCHANGING = 0x46;
//發(fā)送此消息給那個(gè)窗口的大小和位置已經(jīng)被改變時(shí),來調(diào)用setwindowpos函數(shù)或其它窗口管理函數(shù)
const int WM_WINDOWPOSCHANGED = 0x47;
//當(dāng)系統(tǒng)將要進(jìn)入暫停狀態(tài)時(shí)發(fā)送此消息
const int WM_POWER = 0x48;
//當(dāng)一個(gè)應(yīng)用程序傳遞數(shù)據(jù)給另一個(gè)應(yīng)用程序時(shí)發(fā)送此消息
const int WM_COPYDATA = 0x4A;
//當(dāng)某個(gè)用戶取消程序日志激活狀態(tài),提交此消息給程序
const int WM_CANCELJOURNA = 0x4B;
//當(dāng)某個(gè)控件的某個(gè)事件已經(jīng)發(fā)生或這個(gè)控件需要得到一些信息時(shí),發(fā)送此消息給它的父窗口
const int WM_NOTIFY = 0x4E;
//當(dāng)用戶選擇某種輸入語言,或輸入語言的熱鍵改變
const int WM_INPUTLANGCHANGEREQUEST = 0x50;
//當(dāng)平臺現(xiàn)場已經(jīng)被改變后發(fā)送此消息給受影響的最頂級窗口
const int WM_INPUTLANGCHANGE = 0x51;
//當(dāng)程序已經(jīng)初始化windows幫助例程時(shí)發(fā)送此消息給應(yīng)用程序
const int WM_TCARD = 0x52;
//此消息顯示用戶按下了F1,如果某個(gè)菜單是激活的,就發(fā)送此消息個(gè)此窗口關(guān)聯(lián)的菜單,否則就發(fā)送給有焦點(diǎn)的窗口,如果//當(dāng)前都沒有焦點(diǎn),就把此消息發(fā)送給//當(dāng)前激活的窗口
const int WM_HELP = 0x53;
//當(dāng)用戶已經(jīng)登入或退出后發(fā)送此消息給所有的窗口,//當(dāng)用戶登入或退出時(shí)系統(tǒng)更新用戶的具體設(shè)置信息,在用戶更新設(shè)置時(shí)系統(tǒng)馬上發(fā)送此消息
const int WM_USERCHANGED = 0x54;
//公用控件,自定義控件和他們的父窗口通過此消息來判斷控件是使用ANSI還是UNICODE結(jié)構(gòu)
const int WM_NOTIFYFORMAT = 0x55;
//當(dāng)用戶某個(gè)窗口中點(diǎn)擊了一下右鍵就發(fā)送此消息給這個(gè)窗口
//const int WM_CONTEXTMENU = ??;
//當(dāng)調(diào)用SETWINDOWLONG函數(shù)將要改變一個(gè)或多個(gè) 窗口的風(fēng)格時(shí)發(fā)送此消息給那個(gè)窗口
const int WM_STYLECHANGING = 0x7C;
//當(dāng)調(diào)用SETWINDOWLONG函數(shù)一個(gè)或多個(gè) 窗口的風(fēng)格后發(fā)送此消息給那個(gè)窗口
const int WM_STYLECHANGED = 0x7D;
//當(dāng)顯示器的分辨率改變后發(fā)送此消息給所有的窗口
const int WM_DISPLAYCHANGE = 0x7E;
//此消息發(fā)送給某個(gè)窗口來返回與某個(gè)窗口有關(guān)連的大圖標(biāo)或小圖標(biāo)的句柄
const int WM_GETICON = 0x7F;
//程序發(fā)送此消息讓一個(gè)新的大圖標(biāo)或小圖標(biāo)與某個(gè)窗口關(guān)聯(lián)
const int WM_SETICON = 0x80;
//當(dāng)某個(gè)窗口第一次被創(chuàng)建時(shí),此消息在WM_CREATE消息發(fā)送前發(fā)送
const int WM_NCCREATE = 0x81;
//此消息通知某個(gè)窗口,非客戶區(qū)正在銷毀
const int WM_NCDESTROY = 0x82;
//當(dāng)某個(gè)窗口的客戶區(qū)域必須被核算時(shí)發(fā)送此消息
const int WM_NCCALCSIZE = 0x83;
//移動(dòng)鼠標(biāo),按住或釋放鼠標(biāo)時(shí)發(fā)生
const int WM_NCHITTEST = 0x84;
//程序發(fā)送此消息給某個(gè)窗口當(dāng)它(窗口)的框架必須被繪制時(shí)
const int WM_NCPAINT = 0x85;
//此消息發(fā)送給某個(gè)窗口僅當(dāng)它的非客戶區(qū)需要被改變來顯示是激活還是非激活狀態(tài)
const int WM_NCACTIVATE = 0x86;
//發(fā)送此消息給某個(gè)與對話框程序關(guān)聯(lián)的控件,widdows控制方位鍵和TAB鍵使輸入進(jìn)入此控件通過應(yīng)
const int WM_GETDLGCODE = 0x87;
//當(dāng)光標(biāo)在一個(gè)窗口的非客戶區(qū)內(nèi)移動(dòng)時(shí)發(fā)送此消息給這個(gè)窗口 非客戶區(qū)為:窗體的標(biāo)題欄及窗 的邊框體
const int WM_NCMOUSEMOVE = 0xA0;
//當(dāng)光標(biāo)在一個(gè)窗口的非客戶區(qū)同時(shí)按下鼠標(biāo)左鍵時(shí)提交此消息
const int WM_NCLBUTTONDOWN = 0xA1;
//當(dāng)用戶釋放鼠標(biāo)左鍵同時(shí)光標(biāo)某個(gè)窗口在非客戶區(qū)十發(fā)送此消息
const int WM_NCLBUTTONUP = 0xA2;
//當(dāng)用戶雙擊鼠標(biāo)左鍵同時(shí)光標(biāo)某個(gè)窗口在非客戶區(qū)十發(fā)送此消息
const int WM_NCLBUTTONDBLCLK = 0xA3;
//當(dāng)用戶按下鼠標(biāo)右鍵同時(shí)光標(biāo)又在窗口的非客戶區(qū)時(shí)發(fā)送此消息
const int WM_NCRBUTTONDOWN = 0xA4;
//當(dāng)用戶釋放鼠標(biāo)右鍵同時(shí)光標(biāo)又在窗口的非客戶區(qū)時(shí)發(fā)送此消息
const int WM_NCRBUTTONUP = 0xA5;
//當(dāng)用戶雙擊鼠標(biāo)右鍵同時(shí)光標(biāo)某個(gè)窗口在非客戶區(qū)十發(fā)送此消息
const int WM_NCRBUTTONDBLCLK = 0xA6;
//當(dāng)用戶按下鼠標(biāo)中鍵同時(shí)光標(biāo)又在窗口的非客戶區(qū)時(shí)發(fā)送此消息
const int WM_NCMBUTTONDOWN = 0xA7;
//當(dāng)用戶釋放鼠標(biāo)中鍵同時(shí)光標(biāo)又在窗口的非客戶區(qū)時(shí)發(fā)送此消息
const int WM_NCMBUTTONUP = 0xA8;
//當(dāng)用戶雙擊鼠標(biāo)中鍵同時(shí)光標(biāo)又在窗口的非客戶區(qū)時(shí)發(fā)送此消息
const int WM_NCMBUTTONDBLCLK = 0xA9;
//WM_KEYDOWN 按下一個(gè)鍵
const int WM_KEYDOWN = 0x0100;
//釋放一個(gè)鍵
const int WM_KEYUP = 0x0101;
//按下某鍵,并已發(fā)出WM_KEYDOWN, WM_KEYUP消息
const int WM_CHAR = 0x102;
//當(dāng)用translatemessage函數(shù)翻譯WM_KEYUP消息時(shí)發(fā)送此消息給擁有焦點(diǎn)的窗口
const int WM_DEADCHAR = 0x103;
//當(dāng)用戶按住ALT鍵同時(shí)按下其它鍵時(shí)提交此消息給擁有焦點(diǎn)的窗口
const int WM_SYSKEYDOWN = 0x104;
//當(dāng)用戶釋放一個(gè)鍵同時(shí)ALT 鍵還按著時(shí)提交此消息給擁有焦點(diǎn)的窗口
const int WM_SYSKEYUP = 0x105;
//當(dāng)WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函數(shù)翻譯后提交此消息給擁有焦點(diǎn)的窗口
const int WM_SYSCHAR = 0x106;
//當(dāng)WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函數(shù)翻譯后發(fā)送此消息給擁有焦點(diǎn)的窗口
const int WM_SYSDEADCHAR = 0x107;
//在一個(gè)對話框程序被顯示前發(fā)送此消息給它,通常用此消息初始化控件和執(zhí)行其它任務(wù)
const int WM_INITDIALOG = 0x110;
//當(dāng)用戶選擇一條菜單命令項(xiàng)或當(dāng)某個(gè)控件發(fā)送一條消息給它的父窗口,一個(gè)快捷鍵被翻譯
const int WM_COMMAND = 0x111;
//當(dāng)用戶選擇窗口菜單的一條命令或//當(dāng)用戶選擇最大化或最小化時(shí)那個(gè)窗口會(huì)收到此消息
const int WM_SYSCOMMAND = 0x112;
//發(fā)生了定時(shí)器事件
const int WM_TIMER = 0x113;
//當(dāng)一個(gè)窗口標(biāo)準(zhǔn)水平滾動(dòng)條產(chǎn)生一個(gè)滾動(dòng)事件時(shí)發(fā)送此消息給那個(gè)窗口,也發(fā)送給擁有它的控件
const int WM_HSCROLL = 0x114;
//當(dāng)一個(gè)窗口標(biāo)準(zhǔn)垂直滾動(dòng)條產(chǎn)生一個(gè)滾動(dòng)事件時(shí)發(fā)送此消息給那個(gè)窗口也,發(fā)送給擁有它的控件
const int WM_VSCROLL = 0x115;
//當(dāng)一個(gè)菜單將要被激活時(shí)發(fā)送此消息,它發(fā)生在用戶菜單條中的某項(xiàng)或按下某個(gè)菜單鍵,它允許程序在顯示前更改菜單
const int WM_INITMENU = 0x116;
//當(dāng)一個(gè)下拉菜單或子菜單將要被激活時(shí)發(fā)送此消息,它允許程序在它顯示前更改菜單,而不要改變?nèi)?nbsp;
const int WM_INITMENUPOPUP = 0x117;
//當(dāng)用戶選擇一條菜單項(xiàng)時(shí)發(fā)送此消息給菜單的所有者(一般是窗口)
const int WM_MENUSELECT = 0x11F;
//當(dāng)菜單已被激活用戶按下了某個(gè)鍵(不同于加速鍵),發(fā)送此消息給菜單的所有者
const int WM_MENUCHAR = 0x120;
//當(dāng)一個(gè)模態(tài)對話框或菜單進(jìn)入空載狀態(tài)時(shí)發(fā)送此消息給它的所有者,一個(gè)模態(tài)對話框或菜單進(jìn)入空載狀態(tài)就是在處理完一條或幾條先前的消息后沒有消息它的列隊(duì)中等待
const int WM_ENTERIDLE = 0x121;
//在windows繪制消息框前發(fā)送此消息給消息框的所有者窗口,通過響應(yīng)這條消息,所有者窗口可以通過使用給定的相關(guān)顯示設(shè)備的句柄來設(shè)置消息框的文本和背景顏色
const int WM_CTLCOLORMSGBOX = 0x132;
//當(dāng)一個(gè)編輯型控件將要被繪制時(shí)發(fā)送此消息給它的父窗口通過響應(yīng)這條消息,所有者窗口可以通過使用給定的相關(guān)顯示設(shè)備的句柄來設(shè)置編輯框的文本和背景顏色
const int WM_CTLCOLOREDIT = 0x133;
//當(dāng)一個(gè)列表框控件將要被繪制前發(fā)送此消息給它的父窗口通過響應(yīng)這條消息,所有者窗口可以通過使用給定的相關(guān)顯示設(shè)備的句柄來設(shè)置列表框的文本和背景顏色
const int WM_CTLCOLORLISTBOX = 0x134;
//當(dāng)一個(gè)按鈕控件將要被繪制時(shí)發(fā)送此消息給它的父窗口通過響應(yīng)這條消息,所有者窗口可以通過使用給定的相關(guān)顯示設(shè)備的句柄來設(shè)置按紐的文本和背景顏色
const int WM_CTLCOLORBTN = 0x135;
//當(dāng)一個(gè)對話框控件將要被繪制前發(fā)送此消息給它的父窗口通過響應(yīng)這條消息,所有者窗口可以通過使用給定的相關(guān)顯示設(shè)備的句柄來設(shè)置對話框的文本背景顏色
const int WM_CTLCOLORDLG = 0x136;
//當(dāng)一個(gè)滾動(dòng)條控件將要被繪制時(shí)發(fā)送此消息給它的父窗口通過響應(yīng)這條消息,所有者窗口可以通過使用給定的相關(guān)顯示設(shè)備的句柄來設(shè)置滾動(dòng)條的背景顏色
const int WM_CTLCOLORSCROLLBAR = 0x137;
//當(dāng)一個(gè)靜態(tài)控件將要被繪制時(shí)發(fā)送此消息給它的父窗口通過響應(yīng)這條消息,所有者窗口可以 通過使用給定的相關(guān)顯示設(shè)備的句柄來設(shè)置靜態(tài)控件的文本和背景顏色
const int WM_CTLCOLORSTATIC = 0x138;
//當(dāng)鼠標(biāo)輪子轉(zhuǎn)動(dòng)時(shí)發(fā)送此消息個(gè)當(dāng)前有焦點(diǎn)的控件
const int WM_MOUSEWHEEL = 0x20A;
//雙擊鼠標(biāo)中鍵
const int WM_MBUTTONDBLCLK = 0x209;
//釋放鼠標(biāo)中鍵
const int WM_MBUTTONUP = 0x208;
//移動(dòng)鼠標(biāo)時(shí)發(fā)生,同WM_MOUSEFIRST
const int WM_MOUSEMOVE = 0x200;
//按下鼠標(biāo)左鍵
const int WM_LBUTTONDOWN = 0x201;
//釋放鼠標(biāo)左鍵
const int WM_LBUTTONUP = 0x202;
//雙擊鼠標(biāo)左鍵
const int WM_LBUTTONDBLCLK = 0x203;
//按下鼠標(biāo)右鍵
const int WM_RBUTTONDOWN = 0x204;
//釋放鼠標(biāo)右鍵
const int WM_RBUTTONUP = 0x205;
//雙擊鼠標(biāo)右鍵
const int WM_RBUTTONDBLCLK = 0x206;
//按下鼠標(biāo)中鍵
const int WM_MBUTTONDOWN = 0x207;
const int WM_USER = 0x0400;
const int MK_LBUTTON = 0x0001;
const int MK_RBUTTON = 0x0002;
const int MK_SHIFT = 0x0004;
const int MK_CONTROL = 0x0008;
const int MK_MBUTTON = 0x0010;
const int MK_XBUTTON1 = 0x0020;
const int MK_XBUTTON2 = 0x0040;