Windows是一個訊息驅動式系統,SendMessage是應用程式和應用程式之間進行訊息傳遞的主要手段之一,這裡我搜集整理了SendMessage函數的詳細參數介紹,以備自用。
VFP聲明:
DECLARE INTEGER SendMessage IN user32;
INTEGER hWnd,;
INTEGER wMsg,;
INTEGER wParam,;
INTEGER lParam
參數1:hWnd-視窗控制代碼。視窗可以是任何類型的螢幕對象。
參數2:wMsg-用於區別其他訊息的常量值.
參數3:wParam-通常是一個與訊息有關的常量值,也可能是視窗或控制項的控制代碼.
參數4: lParam-通常是一個指向記憶體中資料的指標。
--------------------------------------------------
wParam表示是何種Windows訊息
lParam表示某條Windows訊息的具體內容的指標,它實際指向儲存那個內容的記憶體位址
wParam和lParam是Windows訊息機制的兩個最重要參數,整個Windows依靠這兩個參數傳遞各種各樣的訊息,首先是wParam,它表示此次的訊息類型是什嗎?是鍵盤?是滑鼠?鍵盤裡又分按下還是抬起,滑鼠裡又分是單擊還是雙擊,等等。lParam是一個指標,它指向本條訊息所儲存的資訊的記憶體地區的首地址,很顯然,這個地址存放的東西是很靈活的,比如滑鼠訊息,那麼這裡可能存放的是各鍵的狀態或者游標的X,Y座標。換成鍵盤訊息,則是鍵碼等等。總之,wParam區分了類別,lParam存放了該類別所儲存的資訊。因為VB沒有指標,好在這裡並不需要更多的指標操作,只是記錄一個首地址,所以可以用Long來代替
--------------------------------------------------
==================================================================
wMsg參數常量值:
==================================================================
#DeFine WM_CREATE 0x01 建立一個視窗
#DeFine WM_DESTROY 0x02當一個視窗被破壞時發送
#DeFine WM_MOVE 0x03移動一個視窗
#DeFine WM_SIZE 0x05改變一個視窗的大小
#DeFine WM_ACTIVATE 0x06一個視窗被啟用或失去啟用狀態
#DeFine WM_SETFOCUS 0x07一個視窗獲得焦點
#DeFine WM_KILLFOCUS 0x08一個視窗失去焦點
#DeFine WM_ENABLE 0x0A一個視窗改變成Enable狀態
#DeFine WM_SETREDRAW 0x0B設定視窗是否能重畫
#DeFine WM_SETTEXT 0x0C應用程式發送此訊息來設定一個視窗的文本
#DeFine WM_GETTEXT 0x0D應用程式發送此訊息來複製對應視窗的文本到緩衝區
#DeFine WM_GETTEXTLENGTH 0x0E得到與一個視窗有關的文本的長度(不包含Null 字元)
#DeFine WM_PAINT 0x0F要求一個視窗重畫自己
#DeFine WM_CLOSE 0x10當一個視窗或應用程式要關閉時發送一個訊號
#DeFine WM_QUERYENDSESSION 0x11當使用者選擇結束對話方塊或程式自己調用ExitWindows函數
#DeFine WM_QUIT 0x12用來結束程式運行#DeFine WM_QUERYOPEN 0x13當使用者視窗恢複以前的大小位置時,把此訊息發送給某個表徵圖
#DeFine WM_ERASEBKGND 0x14當視窗背景必須被擦除時(例在視窗改變大小時)
#DeFine WM_SYSCOLORCHANGE 0x15當系統色彩改變時,發送此訊息給所有最上層視窗
#DeFine WM_ENDSESSION 0x16當系統進程發出WM_QUERYENDSESSION訊息後,此訊息發送給應用程式,通知它對話是否結束
#DeFine WM_SHOWWINDOW 0x18當隱藏或顯示視窗是發送此訊息給這個視窗
#DeFine WM_ACTIVATEAPP 0x1C發此訊息給應用程式哪個視窗是啟用的,哪個是非啟用的
#DeFine WM_FONTCHANGE 0x1D當系統的字型資源庫變化時發送此訊息給所有最上層視窗
#DeFine WM_TIMECHANGE 0x1E當系統的時間變化時發送此訊息給所有最上層視窗
#DeFine WM_CANCELMODE 0x1F發送此訊息來取消某種進行中的摸態(操作)
#DeFine WM_SETCURSOR 0x20如果滑鼠引起游標在某個視窗中移動且滑鼠輸入沒有被捕獲時,就發訊息給某個視窗
#DeFine WM_MOUSEACTIVATE 0x21當游標在某個非啟用的視窗中而使用者正按著滑鼠的某個鍵發送此訊息給當前視窗
#DeFine WM_CHILDACTIVATE 0x22發送此訊息給MDI子視窗當使用者點擊此視窗的標題列,或當視窗被啟用,移動,改變大小
#DeFine WM_QUEUESYNC 0x23此訊息由基於電腦的訓練程式發送,通過WH_JOURNALPALYBACK的hook程式分離出使用者輸入訊息
#DeFine WM_GETMINMAXINFO 0x24此訊息發送給視窗當它將要改變大小或位置
#DeFine WM_PAINTICON 0x26發送給已最小化的視窗當它表徵圖將要被重畫
#DeFine WM_ICONERASEBKGND 0x27此訊息發送給某個已最小化的視窗,僅當它在畫表徵圖前它的背景必須被重畫
#DeFine WM_NEXTDLGCTL 0x28發送此訊息給一個對話方塊程式去更改焦點位置
#DeFine WM_SPOOLERSTATUS 0x2A每當列印管理列隊增加或減少一條作業時發出此訊息
#DeFine WM_DRAWITEM 0x2B當button,combobox,listbox,menu的可視外觀改變時發送
#DeFine WM_MEASUREITEM 0x2C當button, combobox, listbox, listviewcontrol, or menuitem 被建立時
#DeFine WM_VKEYTOITEM 0x2E此訊息有一個LBS_WANTKEYBOARDINPUT風格的發出給它的所有者來響應WM_KEYDOWN訊息
#DeFine WM_CHARTOITEM 0x2F此訊息由一個LBS_WANTKEYBOARDINPUT風格的列表框發送給他的所有者來響應WM_CHAR訊息
#DeFine WM_SETFONT 0x30當繪製文本時程式發送此訊息得到控制項要用的顏色
#DeFine WM_GETFONT 0x31應用程式發送此訊息得到當前控制項繪製文本的字型
#DeFine WM_SETHOTKEY 0x32應用程式發送此訊息讓一個視窗與一個熱鍵相關連
#DeFine WM_GETHOTKEY 0x33應用程式發送此訊息來判斷熱鍵與某個視窗是否有關聯
#DeFine WM_QUERYDRAGICON 0x37此訊息發送給已最小化的視窗,當此視窗將要被拖放而它的類中沒有定義表徵圖,應用程式能返回一個表徵圖或游標的控制代碼,當使用者拖放表徵圖時系統顯示這個表徵圖或游標
#DeFine WM_COMPAREITEM 0x39發送此訊息來判定combobox或listbox新增加的項的相對位置
#DeFine WM_COMPACTING 0x41顯示記憶體已經很少了
#DeFine WM_WINDOWPOSCHANGING 0x46發送此訊息給那個視窗的大小和位置將要被改變時,來調用setwindowpos函數或其它視窗管理函數
#DeFine WM_WINDOWPOSCHANGED 0x47發送此訊息給那個視窗的大小和位置已經被改變時,來調用setwindowpos函數或其它視窗管理函數
#DeFine WM_POWER 0x48當系統將要進入暫停狀態時發送此訊息
#DeFine WM_COPYDATA 0x4A當一個應用程式傳遞資料給另一個應用程式時發送此訊息
#DeFine WM_CANCELJOURNA 0x4B當某個使用者取消程式日誌啟用狀態,提交此訊息給程式
#DeFine WM_NOTIFY 0x4E當某個控制項的某個事件已經發生或這個控制項需要得到一些資訊時,發送此訊息給它的父視窗
#DeFine WM_INPUTLANGCHANGEREQUEST 0x50當使用者選擇某種輸入語言,或輸入語言的熱鍵改變
#DeFine WM_INPUTLANGCHANGE 0x51當平台現場已經被改變後發送此訊息給受影響的最最上層視窗
#DeFine WM_TCARD 0x52當程式已經初始化windows協助常式時發送此訊息給應用程式
#DeFine WM_HELP 0x53此訊息顯示使用者按下了F1,如果某個菜單是啟用的,就發送此訊息個此視窗關聯的菜單,否則就發送給有焦點的視窗,如果當前都沒有焦點,就把此訊息發送給當前啟用的視窗
#DeFine WM_USERCHANGED 0x54當使用者已經登入或退出後發送此訊息給所有的視窗,當使用者登入或退出時系統更新使用者的具體設定資訊,在使用者更新設定時系統馬上發送此訊息
#DeFine WM_NOTIFYFORMAT 0x55公用控制項,自訂控制項和他們的父視窗通過此訊息來判斷控制項是使用ANSI還是UNICODE結構
#DeFine WM_CONTEXTMENU ??當使用者某個視窗中點擊了一下右鍵就發送此訊息給這個視窗
#DeFine WM_STYLECHANGING 0x7C當調用SETWINDOWLONG函數將要改變一個或多個 視窗的風格時發送此訊息給那個視窗
#DeFine WM_STYLECHANGED 0x7D當調用SETWINDOWLONG函數一個或多個 視窗的風格後發送此訊息給那個視窗
#DeFine WM_DISPLAYCHANGE 0x7E當顯示器的解析度改變後發送此訊息給所有的視窗
#DeFine WM_GETICON 0x7F此訊息發送給某個視窗來返回與某個視窗有關連的大表徵圖或小表徵圖的控制代碼
#DeFine WM_SETICON 0x80程式發送此訊息讓一個新的大表徵圖或小表徵圖與某個視窗關聯
#DeFine WM_NCCREATE 0x81當某個視窗第一次被建立時,此訊息在WM_CREATE訊息發送前發送
#DeFine WM_NCDESTROY 0x82此訊息通知某個視窗,非客戶區正在銷毀
#DeFine WM_NCCALCSIZE 0x83當某個視窗的用戶端區域必須被核算時發送此訊息
#DeFine WM_NCHITTEST 0x84移動滑鼠,按住或釋放滑鼠時發生
#DeFine WM_NCPAINT 0x85程式發送此訊息給某個視窗當它(視窗)的架構必須被繪製時
#DeFine WM_NCACTIVATE 0x86此訊息發送給某個視窗僅當它的非客戶區需要被改變來顯示是啟用還是非啟用狀態
#DeFine WM_GETDLGCODE 0x87發送此訊息給某個與對話方塊程式關聯的控制項,widdows控制方位鍵和TAB鍵使輸入進入此控制項通過應
#DeFine WM_NCMOUSEMOVE 0xA0當游標在一個視窗的非客戶區內移動時發送此訊息給這個視窗 非客戶區為:表單的標題列及窗 的邊框體
#DeFine WM_NCLBUTTONDOWN 0xA1當游標在一個視窗的非客戶區同步選取滑鼠左鍵時提交此訊息
#DeFine WM_NCLBUTTONUP 0xA2當使用者釋放滑鼠左鍵同時游標某個視窗在非客戶區十發送此訊息
#DeFine WM_NCLBUTTONDBLCLK 0xA3當使用者雙擊滑鼠左鍵同時游標某個視窗在非客戶區十發送此訊息
#DeFine WM_NCRBUTTONDOWN 0xA4當使用者按下滑鼠右鍵同時游標又在視窗的非客戶區時發送此訊息
#DeFine WM_NCRBUTTONUP 0xA5當使用者釋放滑鼠右鍵同時游標又在視窗的非客戶區時發送此訊息
#DeFine WM_NCRBUTTONDBLCLK 0xA6當使用者雙擊滑鼠右鍵同時游標某個視窗在非客戶區十發送此訊息
#DeFine WM_NCMBUTTONDOWN 0xA7當使用者按下滑鼠中鍵同時游標又在視窗的非客戶區時發送此訊息
#DeFine WM_NCMBUTTONUP 0xA8當使用者釋放滑鼠中鍵同時游標又在視窗的非客戶區時發送此訊息
#DeFine WM_NCMBUTTONDBLCLK 0xA9當使用者雙擊滑鼠中鍵同時游標又在視窗的非客戶區時發送此訊息
#DeFine WM_KEYFIRST 0x100WM_KEYDOWN 按下一個鍵#DeFine WM_KEYUP 0x101釋放一個鍵
#DeFine WM_CHAR 0x102按下某鍵,並已發出WM_KEYDOWN, WM_KEYUP訊息
#DeFine WM_DEADCHAR 0x103當用translatemessage函數翻譯WM_KEYUP訊息時發送此訊息給擁有焦點的視窗
#DeFine WM_SYSKEYDOWN 0x104當使用者按住ALT鍵同步選取其它鍵時提交此訊息給擁有焦點的視窗
#DeFine WM_SYSKEYUP 0x105當使用者釋放一個鍵同時ALT 鍵還按著時提交此訊息給擁有焦點的視窗
#DeFine WM_SYSCHAR 0x106當WM_SYSKEYDOWN訊息被TRANSLATEMESSAGE函數翻譯後提交此訊息給擁有焦點的視窗
#DeFine WM_SYSDEADCHAR 0x107當WM_SYSKEYDOWN訊息被TRANSLATEMESSAGE函數翻譯後發送此訊息給擁有焦點的視窗
#DeFine WM_INITDIALOG 0x110在一個對話方塊程式被顯示前發送此訊息給它,通常用此訊息初始化控制項和執行其它任務
#DeFine WM_COMMAND 0x111當使用者選擇一條功能表命令項或當某個控制項發送一條訊息給它的父視窗,一個快速鍵被翻譯
#DeFine WM_SYSCOMMAND 0x112當使用者選擇視窗菜單的一條命令或當使用者選擇最大化或最小化時那個視窗會收到此訊息
#DeFine WM_TIMER 0x113 發生了定時器事件
#DeFine WM_HSCROLL 0x114 當一個視窗標準水平捲軸產生一個滾動事件時發送此訊息給那個視窗,也發送給擁有它的控制項
#DeFine WM_VSCROLL 0x115 當一個視窗標準垂直捲軸產生一個滾動事件時發送此訊息給那個視窗也,發送給擁有它的控制項
#DeFine WM_INITMENU 0x116當一個菜單將要被啟用時發送此訊息,它發生在使用者菜單條中的某項或按下某個菜單鍵,它允許程式在顯示前更改菜單
#DeFine WM_INITMENUPOPUP 0x117當一個下拉式功能表或子功能表將要被啟用時發送此訊息,它允許程式在它顯示前更改菜單,而不要改變全部
#DeFine WM_MENUSELECT 0x11F當使用者選擇一條功能表項目時發送此訊息給菜單的所有者(一般是視窗)
#DeFine WM_MENUCHAR 0x120當菜單已被啟用使用者按下了某個鍵(不同於加速鍵),發送此訊息給菜單的所有者
#DeFine WM_ENTERIDLE 0x121當一個模態對話方塊或菜單進入空載狀態時發送此訊息給它的所有者,一個模態對話方塊或菜單進入空載狀態就是在處理完一條或幾條先前的訊息後沒有訊息它的列隊中等待
#DeFine WM_CTLCOLORMSGBOX 0x132在windows繪製訊息框前發送此訊息給訊息框的所有者視窗,通過響應這條訊息,所有者視窗可以通過使用給定的相關顯示裝置的控制代碼來設定訊息框的文本和背景顏色
#DeFine WM_CTLCOLOREDIT 0x133當一個編輯型控制項將要被繪製時發送此訊息給它的父視窗 通過響應這條訊息,所有者視窗可以通過使用給定的相關顯示裝置的控制代碼來設定編輯框的文本和背景顏色
#DeFine WM_CTLCOLORLISTBOX 0x134當一個列表框控制項將要被繪製前發送此訊息給它的父視窗 通過響應這條訊息,所有者視窗可以通過使用給定的相關顯示裝置的控制代碼來設定列表框的文本和背景顏色
#DeFine WM_CTLCOLORBTN 0x135當一個按鈕控制項將要被繪製時發送此訊息給它的父視窗 通過響應這條訊息,所有者視窗可以通過使用給定的相關顯示裝置的控制代碼來設定按紐的文本和背景顏色
#DeFine WM_CTLCOLORDLG 0x136當一個對話方塊控制項將要被繪製前發送此訊息給它的父視窗 通過響應這條訊息,所有者視窗可以通過使用給定的相關顯示裝置的控制代碼來設定對話方塊的文本背景顏色
#DeFine WM_CTLCOLORSCROLLBAR 0x137當一個捲軸控制項將要被繪製時發送此訊息給它的父視窗 通過響應這條訊息,所有者視窗可以通過使用給定的相關顯示裝置的控制代碼來設定捲軸的背景顏色
#DeFine WM_CTLCOLORSTATIC 0x138當一個靜態控制項將要被繪製時發送此訊息給它的父視窗 通過響應這條訊息,所有者視窗可以 通過使用給定的相關顯示裝置的控制代碼來設定靜態控制項的文本和背景顏色
#DeFine WM_MOUSEFIRST 0x200移動滑鼠時發生
#DeFine WM_MOUSEMOVE 0x200移動滑鼠時發生,同WM_MOUSEFIRST
#DeFine WM_LBUTTONDOWN 0x201按下滑鼠左鍵
#DeFine WM_LBUTTONUP 0x202釋放滑鼠左鍵
#DeFine WM_LBUTTONDBLCLK 0x203雙擊滑鼠左鍵
#DeFine WM_RBUTTONDOWN 0x204按下滑鼠右鍵
#DeFine WM_RBUTTONUP 0x205釋放滑鼠右鍵
#DeFine WM_RBUTTONDBLCLK 0x206雙擊滑鼠右鍵
#DeFine WM_MBUTTONDOWN 0x207按下滑鼠中鍵
#DeFine WM_MBUTTONUP 0x208釋放滑鼠中鍵
#DeFine WM_MBUTTONDBLCLK 0x209雙擊滑鼠中鍵
#DeFine WM_MOUSEWHEEL 0x20A當滑鼠輪子轉動時發送此訊息個當前有焦點的控制項
===================
Buttons
===================
BM_CLICK button被點擊 訊息
BM_GETCHECK 用於check boxes或radio boxes,查看是否checked了。
BM_GETSTATE 發送此訊息,可返回button的狀態,如是否被checked;是否可用(不可用就變灰了)
BM_SETCHECK 如果已經checked了,發送此訊息後,變為unchecked,就是那個鉤鉤沒被選上。ok?
BM_SETSTATE 設定button被點擊狀態。
====================
ComboBoxes
====================
CB_ADDSTRING 添加字串到ComboBoxes。
CB_DELETESTRING 刪除ComboBoxes中的條目,既item
CB_GETCOUNT 得到ComboBoxes條目item的數目
CB_GETCURSEL 返回ComboBoxes中被選條目在ComboBoxes中的位置,第一條為0。如果沒有條目或出錯,則返回-1
CB_GETDROPPEDSTATE 發送此訊息,可判斷ComboBoxes的listbox是否被放下,如果是,返回非零值,不是則返回0
CB_GETLBTEXT 得到combobox的條目的text。傳回值是這個text的長度。
CB_GETLBTEXTLEN 傳回值是條目的text的長度。
CB_INSERTSTRING 插入字串條目到combobox中CB_RESETCONTENT清空combobox所有條目
CB_SETCURSEL 設定combobox被選條目。
CB_SHOWDROPDOWN 讓combobox的listbox下拉;既顯出所有條目
===================
EditControls
===================
EM_CANUNDO 決定上一次操作是否可以undo(撤消操作)。如果可以,則可發送EM_undo
EM_GETFIRSTVISIBLELINE 在multi-line控制項中,找到最上層的可見的行號。次行號是相對於所有行的。
EM_GETPASSWORDCHAR 返回密碼框的字元集。既是查看密碼
EM_GETSEL 返回在可編輯控制項中,被選擇(HIGHLIGHT高量選擇)的字元集的起點和終點的位置。用sendmessage的wParam參數返回起點位置;lParam返回終點位置
EM_REPLACESEL用不同的字串替換可編輯控制項中的字串,如果可編輯控制項中沒有字串,則此訊息變為添加字串
EM_SETPASSWORDCHAR 在可編輯控制項中設定密碼字元集,既用*代替
EM_UNDO 發送操作撤消訊息
======================
IP AddressControl
======================
IPM_CLEARADDRESS 清除IP地址控制項(IP Address control)的內容
IPM_GETADDRESS 從IP地址控制項獲得儲存在它中的IP地址資訊
IPM_ISBLANK 決定IP地址控制項是否可以為空白值。既127.0.0.1之類的地址為空白。
IPM_SETADDRESS 在IP地址控制項中設定IP地址 IPM_SETFOCUS 在IP地址控制項中,當需要輸入IP地址時,使之獲得鍵盤輸入焦點
IPM_SETRANGE 設定輸入IP地址的有效範圍
=============================
Media Control Interface(MCI)
=============================
MM_MCINOTIFY 告訴表單MCI命令完成的狀態.這個狀態包括success,failure,或其它事件
=============================
Menus
=============================
WM_COMMAND 當使用者選擇菜單中的項目後,將向表單發送此訊息.表單受到此訊息後,再決定下一個行為 WM_INITMENU 當菜單準備顯示前,向表單發送此訊息,表單將初始化功能表項目.
WM_SYSCOMMAND 向表單發送使用者點擊系統功能表訊息.表單將響應這個訊息,決定下個行為.
============================
Windows
============================
WM_CLOSE 發送讓表單關閉的訊息,有些表單會在此時彈出個關閉對話方塊。
WM_GETTEXT 返回表單標題列(caption屬性)。需要先用WM_GETTEXTLENGTH獲得字串長度
WM_GETTEXTLENGTH 見上!
WM_HELP 發送此訊息後,將顯示指定的HELP檔案
WM_SETTEXT 設定表單標題列
============================
List Boxes
============================
LB_ADDSTRING 在條目中添加字串
LB_DELETESTRING 刪除一個條目.條目序號是從0開始的.
LB_GETCOUNT 得到條目總數.
LB_GETCURSEL 得到單選的listbox的選項條目的序號
LB_GETSEL 判斷list的條目是否被選上,如果選上了,則返回>0的值.否則返回0,表示使用者沒選擇條目
LB_GETSELCOUNT 獲得可多選的list,被使用者選擇的條目的個數.
LB_GETSELITEMS 返回可多選的list的被選條目的序號.可返回數組.
LB_GETTEXT 得到list中的一個條目的text值
LB_GETTEXTLEN 得到list中的一個條目的text值的長度
LB_INSERTSTRING 在list中插入一個條目。如果成功,將返回插入後,此條目的序號。
LB_RESETCONTENT 清空所有的list中的條目。
LB_SETCURSEL 對單選的listbox,設定使用者選擇條目的具體值
LB_SETSEL 對多選的listbox,設定使用者選擇條目的具體值
===========================
Mouse
===========================
WM_LBUTTONDBLCLK 當滑鼠在一個表單範圍內時,告訴此表單滑鼠左鍵已雙擊。傳回值0
WM_LBUTTONDOWN 當滑鼠在一個表單範圍內時,告訴此表單滑鼠左鍵已點擊,傳回值0 WM_LBUTTONUP 當滑鼠在一個表單範圍內時,告訴此表單滑鼠左鍵已釋放,傳回值0
WM_MBUTTONDBLCLK 當滑鼠在一個表單範圍內時,告訴此表單滑鼠中鍵已雙擊。傳回值0
WM_MBUTTONDOWN 當滑鼠在一個表單範圍內時,告訴此表單滑鼠中鍵已點擊,返回0 WM_MBUTTONUP 當滑鼠在一個表單範圍內時,告訴此表單滑鼠中鍵已釋放,傳回值0