在網上看到有篇介紹windows系統訊息的文章,還比較全面。收集起來,已備以後查用:
==============================================================================
訊息,就是指Windows發出的一個通知,告訴應用程式某個事情發生了。例如,單擊滑鼠、改變視窗尺寸、按下鍵盤上的一個鍵都會使Windows發送一個訊息給應用程式。訊息本身是作為一個記錄傳遞給應用程式的,這個記錄中包含了訊息的類型以及其他資訊。例如,對於單擊滑鼠所產生的訊息來說,這個記錄中包含了單擊滑鼠時的座標。這個記錄類型叫做TMsg,
它在Windows單元中是這樣聲明的:
type
TMsg = packed record
hwnd: HWND; / /視窗控制代碼
message: UINT; / /訊息常量標識符
wParam: WPARAM ; // 32位訊息的特定附加資訊
lParam: LPARAM ; // 32位訊息的特定附加資訊
time: DWORD; / /訊息建立時的時間
pt: TPoint; / /訊息建立時的滑鼠位置
end;
訊息中有什嗎?
是否覺得一個訊息記錄中的資訊像希臘語一樣?如果是這樣,那麼看一看下面的解釋:
hwnd 32位的視窗控制代碼。視窗可以是任何類型的螢幕對象,因為Win32能夠維護大多數可視對象的控制代碼(視窗、對話方塊、按鈕、編輯框等)。
message 用於區別其他訊息的常量值,這些常量可以是Windows單元中預定義的常量,也可以是自訂的常量。
wParam 通常是一個與訊息有關的常量值,也可能是視窗或控制項的控制代碼。
lParam 通常是一個指向記憶體中資料的指標。由於W P a r a m、l P a r a m和P o i n t e r都是3 2位的,
因此,它們之間可以相互轉換。
WM_NULL = $0000;
WM_CREATE = $0001;
應用程式建立一個視窗
WM_DESTROY = $0002;
一個視窗被銷毀
WM_MOVE = $0003;
移動一個視窗
WM_SIZE = $0005;
改變一個視窗的大小
WM_ACTIVATE = $0006;
一個視窗被啟用或失去啟用狀態;
WM_SETFOCUS = $0007;
獲得焦點後
WM_KILLFOCUS = $0008;
失去焦點
WM_ENABLE = $000A;
改變enable狀態
WM_SETREDRAW = $000B;
設定視窗是否能重畫
WM_SETTEXT = $000C;
應用程式發送此訊息來設定一個視窗的文本
WM_GETTEXT = $000D;
應用程式發送此訊息來複製對應視窗的文本到緩衝區
WM_GETTEXTLENGTH = $000E;
得到與一個視窗有關的文本的長度(不包含Null 字元)
WM_PAINT = $000F;
要求一個視窗重畫自己
WM_CLOSE = $0010;
當一個視窗或應用程式要關閉時發送一個訊號
WM_QUERYENDSESSION = $0011;
當使用者選擇結束對話方塊或程式自己調用ExitWindows函數
WM_QUIT = $0012;
用來結束程式運行或當程式調用postquitmessage函數
WM_QUERYOPEN = $0013;
當使用者視窗恢複以前的大小位置時,把此訊息發送給某個表徵圖
WM_ERASEBKGND = $0014;
當視窗背景必須被擦除時(例在視窗改變大小時)
WM_SYSCOLORCHANGE = $0015;
當系統色彩改變時,發送此訊息給所有最上層視窗
WM_ENDSESSION = $0016;
當系統進程發出WM_QUERYENDSESSION訊息後,此訊息發送給應用程式,
通知它對話是否結束
WM_SYSTEMERROR = $0017;
WM_SHOWWINDOW = $0018;
當隱藏或顯示視窗是發送此訊息給這個視窗
WM_ACTIVATEAPP = $001C;
發此訊息給應用程式哪個視窗是啟用的,哪個是非啟用的;
WM_FONTCHANGE = $001D;
當系統的字型資源庫變化時發送此訊息給所有最上層視窗
WM_TIMECHANGE = $001E;
當系統的時間變化時發送此訊息給所有最上層視窗
WM_CANCELMODE = $001F;
發送此訊息來取消某種進行中的摸態(操作)
WM_SETCURSOR = $0020;
如果滑鼠引起游標在某個視窗中移動且滑鼠輸入沒有被捕獲時,就發訊息給某個視窗
WM_MOUSEACTIVATE = $0021;
當游標在某個非啟用的視窗中而使用者正按著滑鼠的某個鍵發送此訊息給當前視窗
WM_CHILDACTIVATE = $0022;
發送此訊息給MDI子視窗當使用者點擊此視窗的標題列,或當視窗被啟用,移動,改變大小
WM_QUEUESYNC = $0023;
此訊息由基於電腦的訓練程式發送,通過WH_JOURNALPALYBACK的hook程式
分離出使用者輸入訊息
WM_GETMINMAXINFO = $0024;
此訊息發送給視窗當它將要改變大小或位置;
WM_PAINTICON = $0026;
發送給已最小化的視窗當它表徵圖將要被重畫
WM_ICONERASEBKGND = $0027;
此訊息發送給某個已最小化的視窗,僅當它在畫表徵圖前它的背景必須被重畫
WM_NEXTDLGCTL = $0028;
發送此訊息給一個對話方塊程式去更改焦點位置
WM_SPOOLERSTATUS = $002A;
每當列印管理列隊增加或減少一條作業時發出此訊息
WM_DRAWITEM = $002B;
當button,combobox,listbox,menu的可視外觀改變時發送
此訊息給這些空件的所有者
WM_MEASUREITEM = $002C;
當button, combo box, list box, list view control, or menu item 被建立時
發送此訊息給控制項的所有者
WM_DELETEITEM = $002D;
當the list box 或 combo box 被銷毀 或 當 某些項被刪除通過LB_DELETESTRING, LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT 訊息
WM_VKEYTOITEM = $002E;
此訊息有一個LBS_WANTKEYBOARDINPUT風格的發出給它的所有者來響應WM_KEYDOWN訊息
WM_CHARTOITEM = $002F;
此訊息由一個LBS_WANTKEYBOARDINPUT風格的列表框發送給他的所有者來響應WM_CHAR訊息
WM_SETFONT = $0030;
當繪製文本時程式發送此訊息得到控制項要用的顏色
WM_GETFONT = $0031;
應用程式發送此訊息得到當前控制項繪製文本的字型
WM_SETHOTKEY = $0032;
應用程式發送此訊息讓一個視窗與一個熱鍵相關連
WM_GETHOTKEY = $0033;
應用程式發送此訊息來判斷熱鍵與某個視窗是否有關聯
WM_QUERYDRAGICON = $0037;
此訊息發送給已最小化的視窗,當此視窗將要被拖放而它的類中沒有定義表徵圖,應用程式能返回一個表徵圖或游標的控制代碼,當使用者拖放表徵圖時系統顯示這個表徵圖或游標
WM_COMPAREITEM = $0039;
發送此訊息來判定combobox或listbox新增加的項的相對位置
WM_GETOBJECT = $003D;
WM_COMPACTING = $0041;
顯示記憶體已經很少了
WM_WINDOWPOSCHANGING = $0046;
發送此訊息給那個視窗的大小和位置將要被改變時,來調用setwindowpos函數或其它視窗管理函數
WM_WINDOWPOSCHANGED = $0047;
發送此訊息給那個視窗的大小和位置已經被改變時,來調用setwindowpos函數或其它視窗管理函數
WM_POWER = $0048;(適用於16位的windows)
當系統將要進入暫停狀態時發送此訊息
WM_COPYDATA = $004A;
當一個應用程式傳遞資料給另一個應用程式時發送此訊息
WM_CANCELJOURNAL = $004B;
當某個使用者取消程式日誌啟用狀態,提交此訊息給程式
WM_NOTIFY = $004E;
當某個控制項的某個事件已經發生或這個控制項需要得到一些資訊時,發送此訊息給它的父視窗
WM_INPUTLANGCHANGEREQUEST = $0050;
當使用者選擇某種輸入語言,或輸入語言的熱鍵改變
WM_INPUTLANGCHANGE = $0051;
當平台現場已經被改變後發送此訊息給受影響的最最上層視窗
WM_TCARD = $0052;
當程式已經初始化windows協助常式時發送此訊息給應用程式
WM_HELP = $0053;
此訊息顯示使用者按下了F1,如果某個菜單是啟用的,就發送此訊息個此視窗關聯的菜單,否則就
發送給有焦點的視窗,如果當前都沒有焦點,就把此訊息發送給當前啟用的視窗
WM_USERCHANGED = $0054;
當使用者已經登入或退出後發送此訊息給所有的視窗,當使用者登入或退出時系統更新使用者的具體
設定資訊,在使用者更新設定時系統馬上發送此訊息;
WM_NOTIFYFORMAT = $0055;
公用控制項,自訂控制項和他們的父視窗通過此訊息來判斷控制項是使用ANSI還是UNICODE結構
在WM_NOTIFY訊息,使用此控制項能使某個控制項與它的父控制項之間進行相互連信
WM_CONTEXTMENU = $007B;
當使用者某個視窗中點擊了一下右鍵就發送此訊息給這個視窗
WM_STYLECHANGING = $007C;
當調用SETWINDOWLONG函數將要改變一個或多個 視窗的風格時發送此訊息給那個視窗
WM_STYLECHANGED = $007D;
當調用SETWINDOWLONG函數一個或多個 視窗的風格後發送此訊息給那個視窗
WM_DISPLAYCHANGE = $007E;
當顯示器的解析度改變後發送此訊息給所有的視窗
WM_GETICON = $007F;
此訊息發送給某個視窗來返回與某個視窗有關連的大表徵圖或小表徵圖的控制代碼;
WM_SETICON = $0080;
程式發送此訊息讓一個新的大表徵圖或小表徵圖與某個視窗關聯;
WM_NCCREATE = $0081;
當某個視窗第一次被建立時,此訊息在WM_CREATE訊息發送前發送;
WM_NCDESTROY = $0082;
此訊息通知某個視窗,非客戶區正在銷毀
WM_NCCALCSIZE = $0083;
當某個視窗的用戶端區域必須被核算時發送此訊息
WM_NCHITTEST = $0084;//移動滑鼠,按住或釋放滑鼠時發生
WM_NCPAINT = $0085;
程式發送此訊息給某個視窗當它(視窗)的架構必須被繪製時;
WM_NCACTIVATE = $0086;
此訊息發送給某個視窗 僅當它的非客戶區需要被改變來顯示是啟用還是非啟用狀態;
WM_GETDLGCODE = $0087;
發送此訊息給某個與對話方塊程式關聯的控制項,widdows控制