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得到與一個窗口有關的文本的長度(不包含空字符)
#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