SendMessage函數完全使用手冊
首先 我們瞭解一下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 得到與一個視窗有關的文本的長度(不包含Null 字元)
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 或其它應用程式發出一個請求要求繪製一個應用程式的一部分 |