windows是一訊息(message)驅動式系統,windows訊息提供了應用程式與應用程式之間、應用程式與windows系統之間進行通訊的手段。應用程式要實現的功能由訊息來觸發,並*對訊息的響應和處理來完成。windows系統中有兩種訊息佇列,一種是系統訊息佇列,另一種是應用程式訊息佇列。計算機的所有輸入裝置由 windows監控,當乙個事件發生時,windows先將輸入的訊息放入系統訊息佇列中,然後再將輸入的訊息拷貝到相應的應用程式佇列中,應用程式中的訊息迴圈從它的訊息佇列中檢索每乙個訊息並傳送給相應的視窗函式中。乙個事件的發生,到達處理它的視窗函式必須經歷上述過程。值得注意的是訊息的非搶先性,即不論事件的急與緩,總是按到達的先後排隊(一些系統訊息除外),這就使得一些外部實時事件可能得不到及時的處理。
由於windows本身是由訊息驅動的,舉乙個例子來說明這個問題。開啟記事本程式,該程式有乙個file選單,那麼,在執行該應用程式的時候,如果使用者單擊了file選單裡new命令時,這個動作將被windows (而不是應用程式本身!)所捕獲,windows經過分析得知這個動作應該由上面所說的那個應用程式去處理,既然是這樣,windows就傳送了個叫做wm_command的訊息給應用程式,該訊息所包含資訊告訴應用程式:"使用者單擊了new選單",應用程式得知這一訊息之後,採取相應的動作來響應它,這個過程稱為訊息處理。windows為每乙個應用程式(確切地說是每乙個執行緒)維護了相應的訊息佇列,應用程式的任務就是不停的從它的訊息佇列中獲取訊息,分析訊息和處理訊息,直到一條接到叫做wm_quit訊息為止,這個過程通常是由一種叫做訊息迴圈的程式結構來實現的。
訊息本身是作為乙個記錄傳遞給應用程式的,這個記錄中包含了訊息的型別以及其他資訊。例如,對於單擊滑鼠所產生的訊息來說,這個記錄中包含了單擊滑鼠時的座標。這個記錄型別叫做t m s g,它在wi n d o w s單元中是這樣宣告的:
type
tmsg = packed record
hwnd: hwnd / /視窗控制代碼
message: uint / /訊息常量識別符號
wparam: wpa r a m // 32位訊息的特定附加資訊
lparam: lpa r a m // 32位訊息的特定附加資訊
time: dword / /訊息建立時的時間
pt: tpoint / /訊息建立時的滑鼠位置
end
訊息中有什麼?
是否覺得乙個訊息記錄中的資訊像希臘語一樣?如果是這樣,那麼看一看下面的解釋:
hwnd 32位的視窗控制代碼。視窗可以是任何型別的螢幕物件,因為win32能夠維護大多數可視物件的控制代碼(視窗、對話方塊、按鈕、編輯框等)。
message 用於區別其他訊息的常量值,這些常?梢允荳indows單元中預定義的常量,也可以是自定義的常量。
wparam 通常是乙個與訊息有關的常量值,也可能是視窗或控制項的控制代碼。
lparam 通常是乙個指向記憶體中資料的指標。由於wparm、lparam和pointer都是32位的,因此,它們之間可以相互轉換。
1. 移動控制項
控制項.傳送資訊 (274, 61458, 0) 其中引數1的值自61457---61471都可用,結果是一樣的,都是移動控制項。還有乙個大家都熟,就是控制項.傳送資訊 (161, 2, 0)
2.調整控制項尺寸
控制項.傳送資訊 (274, 61441, 0) (274,61442,0) (274,61443,0) (274,61444,0) (274,61445,0) (274,61446,0) (274,61447,0) (274,61448,0)
分別對應調整控制項的左寬度 右寬度 頂高度 西北角 東北角 底寬度 西南角 東北角的尺寸。
此外,控制項.傳送資訊(161,10,0) (161,11,0) (161,12,0) (161,13,0) (161,14,0) (161,15,0) (161,16,0) (161,16,0)
也是分別對應調整控制項的左寬度 右寬度 頂高度 西北角 東北角 底寬度 西南角 東北角的尺寸。
3。控制項最大化
控制項.傳送資訊 (274, 61450, 0)其中引數1的值自61488---61503都可用,結果是一樣的。
4。控制項最小化
控制項.傳送資訊 (274, 61473, 0)其中引數1的值自61472---61487都可用,結果是一樣的。
5。馬上啟動螢幕保護(如果電腦裡沒設定螢幕保護本資訊不起作用)
傳送資訊 (274, 61760, 0)其中引數1的值自61760---61776都可用,結果是一樣的。
6.出對話方塊--15秒進入待機(win98下可用,winxp無效,其他未試)
控制項.傳送資訊 (274, 61840, 0)其中引數1的值自61840---61854都可用,結果是一樣的。
7。擊控制項後滑鼠帶問號,再擊後消失。
控制項.傳送資訊 (274, 61836, 0)
8。關閉視窗
控制項.傳送資訊 (16, 0, 0)
9。傳送控制項滑鼠左鍵被按下的資訊
控制項.傳送資訊 (513, 0, 0)
10。傳送控制項滑鼠左鍵被放開的資訊
控制項.傳送資訊 (514, 0, 0)
11。清除視窗的標題
控制項.傳送資訊 (12, 0, 0)
以下是易記事本裡的:
12。複製
編輯框.傳送資訊 (769, 0, 0)
13。粘帖
編輯框.傳送資訊 (770, 0, 0)
14。全選
編輯框.傳送資訊 (177, 0, -1)
15。傳送訊息滾動滾動條
編輯框1.傳送資訊 (277, 0, 0)向上滾動一行
編輯框1.傳送資訊 (277, 1, 0)向下滾動一行
編輯框1.傳送資訊 (277, 2, 0)向上滾動翻頁
編輯框1.傳送資訊 (277, 3, 0)向下滾動翻頁
編輯框1.傳送資訊 (277, 6, 0)向上滾動到頭
編輯框1.傳送資訊 (277, 7, 0)向下滾動到尾
編輯框1.傳送資訊 (276, 0, 0)向左滾動一行
編輯框1.傳送資訊 (276, 1, 0)向右滾動一行
編輯框1.傳送資訊 (276, 2, 0)向左滾動翻頁
編輯框1.傳送資訊 (276, 3, 0)向右滾動翻頁
編輯框1.傳送資訊 (276, 6, 0)向左滾動到頭
編輯框1.傳送資訊 (276, 7, 0)向右滾動到尾
其中:引數idhook 指定了鉤子的型別,總共有如下13種:
wh_callwndproc=4 系統將訊息傳送到指定視窗之前的"鉤子"
wh_callwndprocret=12 訊息已經在視窗中處理的"鉤子"
wh_cbt=5 基於計算機培訓的"鉤子"
wh_debug=9 差錯"鉤子"
wh_foregroundidle=11 前台空閒視窗"鉤子"
wh_getmessage=3 接收訊息投遞的"鉤子"
wh_journalplayback=1 回放以前通過wh_journalrecord=0"鉤子"記錄的輸入訊息
wh_journalrecord=0 輸入訊息記錄"鉤子"
wh_keyboard=2 鍵盤訊息"鉤子"
wh_mouse=7 滑鼠訊息"鉤子"
wh_msgfilter=(-1) 對話方塊、訊息框、選單或滾動條輸入訊息"鉤子"
wh_shell=10 外殼"鉤子"
wh_sysmsgfilter=6 系統訊息"鉤子"
wh_callwndproc=4 傳送到視窗的訊息。由sendmessage觸發
wh_callwndprocret=12 傳送到視窗的訊息。由sendmessage處理完成返回時觸發
wh_getmessage=3 傳送到視窗的訊息。getmessage或peekmessage觸發
wh_keybroad=2 鍵盤鉤子,鍵盤觸發訊息。wm_keyup=257或wm_keydown=256訊息
wh_keybroad_ll=13 地層鍵盤鉤子
wh_mouse=7 滑鼠鉤子,查詢滑鼠事件訊息
wh_mouse_ll=14 低層鍵盤鉤子
wh_hardware=8 非滑鼠、鍵盤訊息時
wh_msgfilter=(-1) 對話方塊、選單或滾動條要處理乙個訊息時。該鉤子是區域性的。
wh_sysmsgfilter=6 同wh_msgfilter=(-1)一樣,系統範圍的。
wh_debug=9 除錯鉤子,用來給鉤子函式除錯
wh_journalrecord=0 監視和記錄輸入事件
wh_journalplayback=1 回放用wh_journalrecord=0記錄事件
wh_shell=10 外殼鉤子,當關於windows外殼事件發生時觸發.
wh_cbt=5 當基於計算機的訓練(cbt)事件發生時
wh_foregroundidle=11 前台應用程式執行緒變成空閒時候,鉤子啟用。
Windows訊息大全
include afxpriv.h 訊息值的定義 include dde.h dde訊息值的定義 include cpl.h 控制面板訊息值的定義 include wfext.h 檔案管理器的訊息值的定義 include ras.h ras 遠端訪問服務 的訊息值的定義 include imm.h ...
windows訊息大全
cpp view plain copy include afxpriv.h 訊息值的定義 include dde.h dde訊息值的定義 include cpl.h 控制面板訊息值的定義 include wfext.h 檔案管理器的訊息值的定義 include ras.h ras 遠端訪問服務 的訊...
Windows視窗訊息大全
windows視窗訊息大全,全不全自己看 include afxpriv.h 訊息值的定義 include dde.h dde訊息值的定義 include cpl.h 控制面板訊息值的定義 include wfext.h 檔案管理器的訊息值的定義 include ras.h ras 遠端訪問服務 的...