SendMessage函式完全使用手冊

youhello發表於2007-11-09
SendMessage函式完全使用手冊[@more@]首先 我們瞭解一下Windows的訊息機制。Windows是一個訊息驅動式系統,Windows訊息提供應用程式與應用程式之間,應用程式與Windows系統之間進行通訊的手段。
舉個例子,開啟記事本程式,該程式有一個 “檔案“選單。 那麼,在執行該程式的時候,如果使用者單擊“檔案選單“裡的“新建“命令, 這個動作將被Windows所捕捉,Windows經過分析得知這個動作應該由我們開啟的記事本程式所來處理,然後Windows就傳送個訊息 譬如我們程式設計的時候有時用到的 WM_COMMAND的訊息給記事本,然後記事本就把這個訊息處理掉。 這個過程就是訊息處理。
接下來,我們把SendMessage的完整形式講一下SendMessage
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
別名
SendMessageA
說明
呼叫一個視窗的視窗函式,將一條訊息發給那個視窗。除非訊息處理完畢,否則該函式不會返回

SendMessage所包含4個引數
hwnd 32位的視窗控制程式碼視窗可以是任何型別的螢幕物件,因為Win32能夠維護大多數可視物件的控制程式碼
wMsg 用於區別其他訊息的常量值,這些常量可以是Windows單元中預定義的常量,也可以是自定義的常量wParam 通常是一個與訊息有關的常量值,也可能是視窗或控制元件的控制程式碼
lParam 通常是一個指向記憶體中資料的指標。由於WParm、lParam和Pointer都是32位的,因此,它們之間可以相互轉換
wMsg函式
WM_CREATE 建立一個視窗
WM_DESTROY 當一個視窗被破壞時傳送
WM_MOVE 移動一個視窗
WM_SIZE 改變一個視窗的大小
WM_ACTIVATE 一個視窗被啟用或失去啟用狀態
WM_SETFOCUS 一個視窗獲得焦點
WM_KILLFOCUS 一個視窗失去焦點
WM_ENABLE 一個視窗改變成Enable狀態
WM_SETREDRAW 設定視窗是否能重畫
WM_SETTEXT 應用程式傳送此訊息來設定一個視窗的文字
WM_GETTEXT 應用程式傳送此訊息來複制對應視窗的文字到緩衝區
WM_GETTEXTLENGTH 得到與一個視窗有關的文字的長度(不包含空字元)
WM_PAINT 要求一個視窗重畫自己
WM_CLOSE 當一個視窗或應用程式要關閉時傳送一個訊號
WM_QUERYENDSESSION 當使用者選擇結束對話方塊或程式自己呼叫ExitWindows函式
WM_QUIT 用來結束程式執行
WM_QUERYOPEN 當使用者視窗恢復以前的大小位置時,把此訊息傳送給某個圖示
WM_ERASEBKGND 當視窗背景必須被擦除時(例在視窗改變大小時)
WM_SYSCOLORCHANGE 當系統顏色改變時,傳送此訊息給所有頂級視窗
WM_ENDSESSION 當系統程式發出 WM_QUERYENDSESSION訊息後,此訊息傳送給應用程式,通知它對話是否結束
WM_SHOWWINDOW 當隱藏或顯示視窗是傳送此訊息給這個視窗
WM_ACTIVATEAPP 發此訊息給應用程式哪個視窗是啟用的,哪個是非啟用的
WM_FONTCHANGE 當系統的字型資源庫變化時傳送此訊息給所有頂級視窗
WM_TIMECHANGE 當系統的時間變化時傳送此訊息給所有頂級視窗
WM_CANCELMODE 傳送此訊息來取消某種正在進行的摸態(操作)
WM_SETCURSOR 如果滑鼠引起游標在某個視窗中移動且滑鼠輸入沒有被捕獲時,就發訊息給某個視窗
WM_MOUSEACTIVATE 當游標在某個非啟用的視窗中而使用者正按著滑鼠的某個鍵傳送此訊息給當前視窗
WM_CHILDACTIVATE 傳送此訊息給MDI子視窗當使用者點選此視窗的標題欄,或當視窗被啟用,移動,改變大小
WM_QUEUESYNC 此訊息由基於計算機的訓練程式傳送,透過WH_JOURNALPALYBACK的hook程式分離出使用者輸入訊息
WM_GETMINMAXINFO 此訊息傳送給視窗當它將要改變大小或位置
WM_PAINTICON 傳送給最小化視窗當它圖示將要被重畫
WM_ICONERASEBKGND 此訊息傳送給某個最小化視窗,僅當它在畫圖示前它的背景必須被重畫
WM_NEXTDLGCTL 傳送此訊息給一個對話方塊程式去更改焦點位置
WM_SPOOLERSTATUS 每當列印管理列隊增加或減少一條作業時發出此訊息
WM_DRAWITEM 當button,combobox,listbox,menu的可視外觀改變時傳送
WM_MEASUREITEM 當button, combo box, list box, list view control, or menu item 被建立時
WM_VKEYTOITEM 此訊息有一個LBS_WANTKEYBOARDINPUT風格的發出給它的所有者來響應WM_KEYDOWN訊息
WM_CHARTOITEM 此訊息由一個LBS_WANTKEYBOARDINPUT風格的列表框傳送給他的所有者來響應WM_CHAR訊息
WM_SETFONT 當繪製文字時程式傳送此訊息得到控制元件要用的顏色
WM_GETFONT 應用程式傳送此訊息得到當前控制元件繪製文字的字型
WM_SETHOTKEY 應用程式傳送此訊息讓一個視窗與一個熱鍵相關連
WM_GETHOTKEY 應用程式傳送此訊息來判斷熱鍵與某個視窗是否有關聯
WM_QUERYDRAGICON 此訊息傳送給最小化視窗,當此視窗將要被拖放而它的類中沒有定義圖示,應用程式能返回一個圖示或游標的控制程式碼,當
使用者拖放圖示時系統顯示這個圖示或游標
WM_COMPAREITEM 傳送此訊息來判
定combobox或listbox新增加的項的相對位置
WM_COMPACTING 顯示記憶體已經很少了
WM_WINDOWPOSCHANGING 傳送此訊息給那個視窗的大小和位置將要被改變時,來呼叫setwindowpos函式或其它視窗管理函式
WM_WINDOWPOSCHANGED 傳送此訊息給那個視窗的大小和位置已經被改變時,來呼叫setwindowpos函式或其它視窗管理函式
WM_POWER 當系統將要進入暫停狀態時傳送此
訊息
WM_COPYDATA 當一個應用程式傳遞資料給另一個應用程式時傳送此訊息
WM_CANCELJOURNA 當某個使用者取消程式日誌啟用狀態,提交此訊息給程式
WM_NOTIFY 當某個控制元件的某個事件已經發生或
這個控制元件需要得到一些資訊時,傳送此訊息給它的父視窗
WM_INPUTLANGCHANGEREQUEST 當使用者選擇某種輸入語言,或輸入語言的熱鍵改變
WM_INPUTLANGCHANGE 當平臺現場已經被改變後傳送此訊息給受影響的最頂級視窗
WM_TCARD 當程式已經初始化windows幫助例
程時傳送此訊息給應用程式
WM_HELP 此訊息顯示使用者按下了F1,如果某
個選單是啟用的,就傳送此訊息個此視窗關聯的選單,否則就傳送給有焦點的視窗,如果當前都沒有焦點,就把此訊息傳送給當前啟用的視窗
WM_USERCHANGED 當使用者已經登入或退出後傳送此訊息給所有的視窗,當使用者登入或退出時系統更新使用者的具體設定資訊,在使用者更新設定時系統馬上傳送此訊息
WM_NOTIFYformAT 公用控制元件,自定義控制元件和他們的父視窗透過此訊息來判斷控制元件是使用ANSI還是UNICODE結構
WM_CONTEXTMENU 當使用者某個視窗中點選了一下右鍵就傳送此訊息給這個視窗
WM_styleCHANGING 當呼叫SETWINDOWLONG函式將要改變一個或多個 視窗的風格時傳送此訊息給那個視窗
WM_styleCHANGED 當呼叫SETWINDOWLONG函式一個或多個 視窗的風格後傳送此訊息給那個視窗
WM_DISPLAYCHANGE 當顯示器的解析度改變後傳送此訊息給所有的視窗
WM_GETICON 此訊息傳送給某個視窗來返回與某
個視窗有關連的大圖示或小圖示的控制程式碼
WM_SETICON 程式傳送此訊息讓一個新的大圖示
或小圖示與某個視窗關聯
WM_NCCREATE 當某個視窗第一次被建立時,此
訊息在WM_CREATE訊息傳送前傳送
WM_NCDESTROY 此訊息通知某個視窗,非客戶區
正在銷燬
WM_NCCALCSIZE 當某個視窗的客戶區域必須被核
算時傳送此訊息
WM_NCHITTEST 移動滑鼠,按住或釋放滑鼠時發

WM_NCPAINT 程式傳送此訊息給某個視窗當它
(視窗)的框架必須被繪製時
WM_NCACTIVATE 此訊息傳送給某個視窗僅當它的
非客戶區需要被改變來顯示是啟用還是非啟用狀態
WM_GETDLGCODE 傳送此訊息給某個與對話方塊程式
關聯的控制元件,widdows控制方位鍵和TAB鍵使輸入進入此控制元件透過應
WM_NCMOUSEMOVE 當游標在一個視窗的非客戶區內移動時傳送此訊息給這個視窗 非客戶區為:窗體的標題欄及窗 的邊框體
WM_NCLBUTTONDOWN 當游標在一個視窗的非客戶區同時按下滑鼠左鍵時提交此訊息
WM_NCLBUTTONUP 當使用者釋放滑鼠左鍵同時游標某個視窗在非客戶區十傳送此訊息
WM_NCLBUTTONDBLCLK 當使用者雙擊滑鼠左鍵同時游標某個視窗在非客戶區十傳送此訊息
WM_NCRBUTTONDOWN 當使用者按下滑鼠右鍵同時游標又在視窗的非客戶區時傳送此訊息
WM_NCRBUTTONUP 當使用者釋放滑鼠右鍵同時游標又在視窗的非客戶區時傳送此訊息
WM_NCRBUTTONDBLCLK 當使用者雙擊滑鼠右鍵同時游標某個視窗在非客戶區十傳送此訊息
WM_NCMBUTTONDOWN 當使用者按下滑鼠中鍵同時游標又在視窗的非客戶區時傳送此訊息
WM_NCMBUTTONUP 當使用者釋放滑鼠中鍵同時游標又在視窗的非客戶區時傳送此訊息
WM_NCMBUTTONDBLCLK 當使用者雙擊滑鼠中鍵同時游標又在視窗的非客戶區時傳送此訊息
WM_KEYFIRST WM_KEYDOWN 按下一個鍵
WM_KEYUP 釋放一個鍵
WM_CHAR 按下某鍵,並已發出WM_KEYDOWN, WM_KEYUP訊息
WM_DEADCHAR 當用translatemessage函式翻譯
WM_KEYUP訊息時傳送此訊息給擁有焦點的視窗
WM_SYSKEYDOWN 當使用者按住ALT鍵同時按下其它
鍵時提交此訊息給擁有焦點的視窗
WM_SYSKEYUP 當使用者釋放一個鍵同時ALT 鍵
還按著時提交此訊息給擁有焦點的視窗
WM_SYSCHAR 當WM_SYSKEYDOWN訊息
被TRANSLATEMESSAGE函式翻譯後提交此訊息給擁有焦點的視窗
WM_SYSDEADCHAR 當WM_SYSKEYDOWN訊息
被TRANSLATEMESSAGE函式翻譯後傳送此訊息給擁有焦點的視窗
WM_INITDIALOG 在一個對話方塊程式被顯示前發
送此訊息給它,通常用此訊息初始化控制元件和執行其它任務
WM_COMMAND 當使用者選擇一條選單命令項或當某個控制元件傳送一條訊息給它的父視窗,一個快捷鍵被翻譯
WM_SYSCOMMAND 當使用者選擇視窗選單的一條命
令或當使用者選擇最大化或最小化時那個視窗會收到此訊息
WM_TIMER 發生了定時器事件
WM_HSCROLL 當一個視窗標準水平捲軸產生一個滾動事件時傳送此訊息給那個視窗,也傳送給擁有它的控制元件
WM_VSCROLL 當一個視窗標準垂直捲軸產生一個滾動事件時傳送此訊息給那個視窗也,傳送給擁有它的控制元件
WM_INITMENU 當一個選單將要被啟用時傳送此訊息,它發生在使用者選單條中的某項或按下某個選單鍵,它允許程式在顯示前更改選單
WM_INITMENUPOPUP 當一個下拉選單或子選單將要被啟用時傳送此訊息,它允許程式在它顯示前更改選單,而不要改變全部
WM_MENUSELECT 當使用者選擇一條選單項時傳送
此訊息給選單的所有者(一般是視窗)
WM_MENUCHAR 當選單已被啟用使用者按下了某個鍵(不同於加速鍵),傳送此訊息給選單的所有者
WM_ENTERIDLE 當一個模態對話方塊或選單進入空載狀態時傳送此訊息給它的所有者,一個模態對話方塊或選單進入空載狀態就是在處理完一條或幾條先前的訊息後沒有訊息它的列隊中等待

WM_CTLCOLORMSGBOX 在windows繪製訊息框前傳送此訊息給訊息框的所有者視窗,透過響應這條訊息,所有者視窗可以透過使用給定的相關顯示裝置的控制程式碼來設定訊息框的文字和背景顏色
WM_CTLCOLOREDIT 當一個編輯型控制元件將要被繪製
時傳送此訊息給它的父視窗 透過響應這條訊息,所有者視窗可以透過使用給定的相關顯示裝置的控制程式碼來設定編輯框的文字和背景顏色
WM_CTLCOLORLISTBOX 當一個列表框控制元件將要被繪製前傳送此訊息給它的父視窗 透過響應這條訊息,所有者視窗可以透過使用給定的相關顯示裝置的控制程式碼來設定列表框的文字和背景顏色
WM_CTLCOLORBTN 當一個按鈕控制元件將要被繪製時
傳送此訊息給它的父視窗 透過響應這條訊息,所有者視窗可以透過使用給定的相關顯示裝置的控制程式碼來設定按紐的文字和背景顏色
WM_CTLCOLORDLG 當一個對話方塊控制元件將要被繪製
前傳送此訊息給它的父視窗,透過響應這條訊息,所有者視窗可以透過使用給定的相關顯示裝置的控制程式碼來設定對話方塊的文字背景顏色
WM_CTLCOLORSCROLLBAR 當一個捲軸控制元件將要被繪製時傳送此訊息給它的父視窗 透過響應這條訊息,所有者視窗可以透過使用給定的相關顯示裝置的控制程式碼來設定捲軸的背景顏色
WM_CTLCOLORSTATIC 當一個靜態控制元件將要被繪製時傳送此訊息給它的父視窗 透過響應這條訊息,所有者視窗可以 透過使用給定的相關顯示裝置的控制程式碼來設定靜態控制元件的文字和背景顏色
WM_MOUSEFIRST WM_MOUSEMOVE 移動滑鼠
WM_LBUTTONDOWN 按下滑鼠左鍵
WM_LBUTTONUP 釋放滑鼠左鍵
WM_LBUTTONDBLCLK 雙擊滑鼠左鍵
WM_RBUTTONDOWN 按下滑鼠右鍵
WM_RBUTTONUP 釋放滑鼠右鍵
WM_RBUTTONDBLCLK 雙擊滑鼠右鍵
WM_MBUTTONDOWN 按下滑鼠中鍵
WM_MBUTTONUP 釋放滑鼠中鍵
WM_MBUTTONDBLCLK 雙擊滑鼠中鍵
WM_MOUSEWHEEL 當滑鼠輪子轉動時傳送此訊息個當前有焦點的控制元件
WM_PARENTNOTIFY 當MDI子視窗被建立或被銷燬
,或使用者按了一下滑鼠鍵而游標在子視窗上時傳送此訊息給它的父視窗
WM_ENTERMENULOOP 傳送此訊息通知應用程式的
主視窗that已經進入了選單迴圈模式
WM_EXITMENULOOP 傳送此訊息通知應用程式的
主視窗that已退出了選單迴圈模式
WM_SIZING 當使用者正在調整視窗大小時傳送此訊息給視窗 透過此訊息應用程式可以監視視窗大小和位置也可以修改他們
WM_CAPTURECHANGED 傳送此訊息 給視窗當它失
去捕獲的滑鼠時
WM_MOVING 當使用者在移動視窗時傳送此訊息,透過此訊息應用程式可以監視視窗大小和位置也可以修改他們
WM_POWERBROADCAST 此訊息傳送給應用程式來通

知它有關電源管理事件
WM_DEVICECHANGE 當裝置的硬體配置改變時

傳送此訊息給應用程式或裝置驅動程式
WM_MDIDESTROY 應用程式傳送此訊息給多文
檔的客戶視窗來關閉一個MDI 子視窗
WM_MDIACTIVATE 應用程式傳送此訊息給多文

檔的客戶視窗通知客戶視窗啟用另一個MDI子視窗,當客戶視窗收到此訊息後,它發出WM_MDIACTIVE訊息給MDI子視窗(未啟用)啟用它
WM_MDIRESTORE 程式 傳送此訊息給MDI客戶
視窗讓子視窗從最大最小化恢復到原來大小
WM_MDINEXT 程式 傳送此訊息給MDI客戶
視窗啟用下一個或前一個視窗
WM_MDIMAXIMIZE 程式傳送此訊息給MDI客戶
視窗來最大化一個MDI子視窗
WM_MDITILE 程式 傳送此訊息給MDI客戶
視窗以平鋪方式重新排列所有MDI子視窗
WM_MDICASCADE 程式 傳送此訊息給MDI客戶
視窗以層疊方式重新排列所有MDI子視窗
WM_MDIICONARRANGE 程式 傳送此訊息給MDI客戶視窗重新排列所有最小化的MDI子視窗
WM_MDIGETACTIVE 程式 傳送此訊息給MDI客戶
視窗來找到啟用的子視窗的控制程式碼
WM_MDISETMENU 程式 傳送此訊息給MDI客戶
視窗用MDI選單代替子視窗的選單
WM_CUT 程式傳送此訊息給一個編輯框或combobox來刪除當前選擇的文字
WM_COPY 程式傳送此訊息給一個編輯框或combobox來複制當前選擇的文字到剪貼簿
WM_PASTE 程式傳送此訊息

給editcontrol或combobox從剪貼簿中得到資料
WM_CLEAR 程式傳送此訊息

給editcontrol或combobox清除當前選擇的內容
WM_UNDO 程式傳送此訊息給editcontrol或combobox撤消最後一次操作
WM_DESTROYCLIPBOARD 當呼叫ENPTYCLIPBOARD函式時 傳送此訊息給剪貼簿的所有者
WM_DRAWCLIPBOARD 當剪貼簿的內容變化時發

送此訊息給剪貼簿觀察鏈的第一個視窗 它允許用剪貼簿觀察視窗來顯示剪貼簿的新內容
WM_PAINTCLIPBOARD 當剪貼簿包含CF_OWNERDIPLAY格式的資料並且剪貼簿觀察視窗的客戶區需要重畫
WM_SIZECLIPBOARD 當剪貼簿包含CF_OWNERDIPLAY格式的資料並且剪貼簿觀察視窗的客戶區域的大小已經改變是
此訊息透過剪貼簿觀察視窗傳送給剪貼簿的所有者
WM_ASKCBformATNAME 透過剪貼簿觀察視窗傳送
此訊息給剪貼簿的所有者來請求一個CF_OWNERDISPLAY格式的剪貼簿的名字
WM_CHANGECBCHAIN 當一個視窗從剪貼簿觀察
鏈中移去時傳送此訊息給剪貼簿觀察鏈的第一個視窗
WM_HSCROLLCLIPBOARD 此訊息透過一個剪貼簿觀察視窗傳送給剪貼簿的所有者 它發生在當剪貼簿包含CFOWNERDISPALY格式的資料並且有個事件在剪貼簿觀察窗的水平捲軸上 所有者應滾動剪貼簿圖象並更新捲軸的值
WM_QUERYNEWPALETTE 此訊息傳送給將要收到焦
點的視窗,此訊息能使視窗在收到焦點時同時有機會實現他的邏輯調色盤
WM_PALETTEISCHANGING 當一個應用程式正要實現它的邏輯調色盤時發此訊息通知所有的應用程式
WM_PALETTECHANGED 此訊息在一個擁有焦點的
視窗實現它的邏輯調色盤後傳送此訊息給所有頂級並重疊的視窗,以此來改變系統調色盤
WM_HOTKEY 當使用者按下由REGISTERHOTKEY函式註冊的熱鍵時提交此訊息
WM_PRINT 應用程式傳送此訊息僅當

WINDOWS或其它應用程式發出一個請求要求繪製一個應用程式的一部分

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/79126/viewspace-981421/,如需轉載,請註明出處,否則將追究法律責任。

相關文章