转载:SendMessage()这个函数有很多奇妙的用途
1,獲得MEMO中的光標位置.
Lops:=SendMessage(memol.Handle,EM_LINEFROMCHAR,Memol.SelStart,0);//光標所在的行號
Cpos:=SendMessage(meno1.Handle,EM_LINEINDEX,Lpos,0);//光標所在的字符位置
LineLength:=SendMessage(memol.handle,EM_LINELENGTH,Cpos,0);//這行的字符數(shù).
2,開關顯示器.
SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0);//關閉顯示器.
SendMessage(Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1);//打開顯示器.
3,有人問我如何讓Memo翻頁,我試了一下,
Next:
sendmessage(memo1.handle,wm_keydown,VK_NEXT,-1);
sendmessage(memo1.handle,wm_keyup,VK_NEXT,-1);
Prev:
sendmessage(memo1.handle,wm_keydown,VK_PRIOR,-1);
sendmessage(memo1.handle,wm_keyup,VK_PRIOR,-1);
TTreeView:
(引用CommCtrl)
SendMessage(TreeView.Handle,TVM_SETBKCOLOR,0,RGB(255,0,0)); 設置TV背景顏色
SendMessage(Button.Handle,WM_LBUTTONDOWN,0,0); 鼠標左鍵按下
SendMessage(Button.Handle,WM_LBUTTONUP,0,0); 鼠標左鍵抬起
SendMessage(Edit.Handle,WM_SETTEXT,255,Integer(PChar('abc'))); 傳遞文本
SendMessage(Edit.Handle,WM_Char,Wparam('Q'),2); 傳遞字符
SendMessage(Button.Handle,BM_SETSTYLE,BS_RADIOBUTTON,1); 改變Button風格
SendMessage(ComboBox.Handle,CB_SETDROPPEDWIDTH,300,0); 改變CBDownWidth
WM_CUT、WM_COPY和WM_PASTE 剪切,復制,粘帖
實現(xiàn)任意組合鍵
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), 0, 0);
keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);
SendMessageA
說明: 調(diào)用一個窗口的窗口函數(shù),將一條消息發(fā)給那個窗口。除非消息處理完畢,否則該函數(shù)不會返回SendMessage所包含4個參數(shù):
1. hwnd 32位的窗口句柄窗口可以是任何類型的屏幕對象,因為Win32能夠維護大多數(shù)可視對象的句柄
2. wMsg 用于區(qū)別其他消息的常量值,這些常量可以是Windows單元中預定義的常量,也可以是自定義的常量
3. wParam 通常是一個與消息有關的常量值,也可能是窗口或控件的句柄
4. lParam 通常是一個指向內(nèi)存中數(shù)據(jù)的指針。由于WParm、lParam和Pointer都是32位的,因此,它們之間可以相互轉換
wMsg函數(shù)
★WM_Create 創(chuàng)建一個窗口
★WM_DESTROY 當一個窗口被破壞時發(fā)送
★WM_MOVE 移動一個窗口
★WM_SIZE 改變一個窗口的大小
★WM_ACTIVATE 一個窗口被激活或失去激活狀態(tài)
★WM_SETFOCUS 一個窗口獲得焦點
★WM_KILLFOCUS 一個窗口失去焦點
★WM_ENABLE 一個窗口改變成Enable狀態(tài)
★WM_SETREDRAW 設置窗口是否能重畫
★WM_SETTEXT 應用程序發(fā)送此消息來設置一個窗口的文本
★WM_GETTEXT 應用程序發(fā)送此消息來復制對應窗口的文本到緩沖區(qū)
★WM_GETTEXTLENGTH 得到與一個窗口有關的文本的長度(不包含空字符)
★WM_PAINT 要求一個窗口重畫自己
★WM_CLOSE 當一個窗口或應用程序要關閉時發(fā)送一個信號
★WM_QUERYENDSESSION 用戶選擇結束對話框或程序自己調(diào)用ExitWindows函數(shù)
★WM_QUIT 用來結束程序運行
★WM_QUERYOPEN 用戶窗口恢復以前的大小位置時,把此消息發(fā)送給某個圖標
★WM_ERASEBKGND 當窗口背景必須被擦除時(例在窗口改變大小時)
★WM_SYSCOLORCHANGE 當系統(tǒng)顏色改變時,發(fā)送此消息給所有頂級窗口
★WM_QUERYENDSESSION 消息后,此消息發(fā)送給應用程序,通知它對話是否結束
★WM_SHOWWINDOW 當隱藏或顯示窗口是發(fā)送此消息給這個窗口
★WM_ACTIVATEAPP 發(fā)此消息給應用程序哪個窗口是激活的,哪個是非激活的
★WM_FONTCHANGE 當系統(tǒng)的字體資源庫變化時發(fā)送此消息給所有頂級窗口
★WM_TIMECHANGE 當系統(tǒng)的時間變化時發(fā)送此消息給所有頂級窗口
★WM_CANCELMODE 發(fā)送此消息來取消某種正在進行的摸態(tài)(操作)
★WM_SETCURSOR 如果鼠標引起光標在某個窗口中移動
★WM_ENDSESSION 當系統(tǒng)進程發(fā)出且鼠標輸入沒有被捕獲時,就發(fā)消息給某個窗口
★WM_MOUSEACTIVATE 當光標在某個非激活的窗口中而用戶正按著鼠標的某個鍵發(fā)送此消息給當前窗口
★WM_CHILDACTIVATE 送此消息給MDI子窗口當用戶點擊此窗口的標題欄,或當窗口被激活,移動,改變大小
★WM_QUEUESYNC 此消息由基于計算機的訓練程序發(fā)送,通過 WH_JOURNALPALYBACK的hook程序分離出用戶輸入消息
★WM_GETMINMAXINFO 此消息發(fā)送給窗口當它將要改變大小或位置
★WM_PAINTICON 發(fā)送給最小化窗口當它圖標將要被重畫
★WM_ICONERASEBKGND 此消息發(fā)送給某個最小化窗口,僅當它在畫圖標前它的背景必須被重畫
★WM_NEXTDLGCT★發(fā)送此消息給一個對話框程序去更改焦點位置
★WM_SPOOLERSTATUS 每當打印管理列隊增加或減少一條作業(yè)時發(fā)出此消息
★WM_DRAWITEM 當button,combobox,listbox,menu的可視外觀改變時發(fā)送
★WM_MEASUREITEM 當button, combobox, listbox, listview control, or menuitem 被創(chuàng)建時
★WM_VKEYTOITEM 此消息有一個LBS_WANTKEYBOARDINPUT風格的發(fā)出給它的所有者來響應WM_KEYDOWN消息
★WM_CHARTOITEM 此消息由一個LBS_WANTKEYBOARDINPUT風格的列表框發(fā)送給他的所有者來響應WM_CHAR消息
★WM_SETFONT 當繪制文本時程序發(fā)送此消息得到控件要用的顏色
★WM_GETFONT 應用程序發(fā)送此消息得到當前控件繪制文本的字體
★WM_SETHOTKEY 應用程序發(fā)送此消息讓一個窗口與一個熱鍵相關連
★WM_GETHOTKEY 應用程序發(fā)送此消息來判斷熱鍵與某個窗口是否有關聯(lián)
★WM_QUERYDRAGICON 此消息發(fā)送給最小化窗口,當此窗口將要被拖放而它的類中沒有定義圖標,應用程序能返回一個圖標或光標的句柄,當用戶拖放圖標時系統(tǒng)顯示這個圖標或光標
★WM_COMPAREITEM 發(fā)送此消息來判定combobox或listbox新增加的項的相對位置
★WM_COMPACTING 顯示內(nèi)存已經(jīng)很少了
★WM_WINDOWPOSCHANGING 發(fā)送此消息給那個窗口的大小和位置將要被改變時,來調(diào)用setwindowpos函數(shù)或其它窗口管理函數(shù)
★WM_WINDOWPOSCHANGED 發(fā)送此消息給那個窗口的大小和位置已經(jīng)被改變時,來調(diào)用setwindowpos函數(shù)或其它窗口管理函數(shù)
★WM_POWER 當系統(tǒng)將要進入暫停狀態(tài)時發(fā)送此消息
★WM_COPYDATA 當一個應用程序傳遞數(shù)據(jù)給另一個應用程序時發(fā)送此消息
★WM_CANCELJOURNA 當某個用戶取消程序日志激活狀態(tài),提交此消息給程序
★WM_NOTIFY 當某個控件的某個事件已經(jīng)發(fā)生或這個控件需要得到一些信息時,發(fā)送此消息給它的父窗口
★WM_INPUTLANGCHANGEREQUEST 當用戶選擇某種輸入語言,或輸入語言的熱鍵改變
★WM_INPUTLANGCHANGE 當平臺現(xiàn)場已經(jīng)被改變后發(fā)送此消息給受影響的最頂級窗口
★WM_TCARD 當程序已經(jīng)初始化windows幫助例程時發(fā)送此消息給應用程序
★WM_HELP 此消息顯示用戶按下了F1,如果某個菜單是激活的,就發(fā)送此消息個此窗口關聯(lián)的菜單,否則就發(fā)送給有焦點的窗口,如果當前都沒有焦點,就把此消息發(fā)送給當前激活的窗口
★WM_USERCHANGED 當用戶已經(jīng)登入或退出后發(fā)送此消息給所有的窗口,當用戶登入或退出時系統(tǒng)更新用戶的具體設置信息,在用戶更新設置時系統(tǒng)馬上發(fā)送此消息
★WM_NOTIFYFORMAT 公用控件,自定義控件和他們的父窗口通過此消息來判斷控件是使用ANSI還是UNICODE結構
★WM_CONTEXTMENU 當用戶某個窗口中點擊了一下右鍵就發(fā)送此消息給這個窗口
★WM_STYLECHANGING 當調(diào)用SETWINDOWLONG函數(shù)將要改變一個或多個 窗口的風格時發(fā)送此消息給那個窗口
★WM_STYLECHANGED 當調(diào)用SETWINDOWLONG函數(shù)一個或多個 窗口的風格后發(fā)送此消息給那個窗口
★WM_DISPLAYCHANGE 當顯示器的分辨率改變后發(fā)送此消息給所有的窗口
★WM_GETICON 此消息發(fā)送給某個窗口來返回與某個窗口有關連的大圖標或小圖標的句柄
★WM_SETICON 程序發(fā)送此消息讓一個新的大圖標或小圖標與某個窗口關聯(lián)
★WM_NCCreate 當某個窗口第一次被創(chuàng)建時,此消息在WM_Create消息發(fā)送前發(fā)送
★WM_NCDESTROY 此消息通知某個窗口,非客戶區(qū)正在銷毀
★WM_NCCALCSIZE 當某個窗口的客戶區(qū)域必須被核算時發(fā)送此消息
★WM_NCHITTEST 移動鼠標,按住或釋放鼠標時發(fā)生
★WM_NCPAINT 程序發(fā)送此消息給某個窗口當它(窗口)的框架必須被繪制時
★WM_NCACTIVATE 此消息發(fā)送給某個窗口僅當它的非客戶區(qū)需要被改變來顯示是激活還是非激活狀態(tài)
★WM_GETDLGCODE 發(fā)送此消息給某個與對話框程序關聯(lián)的控件,widdows控制方位鍵和TAB鍵使輸入進入此控件通過應
★WM_NCMOUSEMOVE 當光標在一個窗口的非客戶區(qū)內(nèi)移動時發(fā)送此消息給這個窗口非客戶區(qū)為:窗體的標題欄及窗的邊框體
★WM_NCLBUTTONDOWN 當光標在一個窗口的非客戶區(qū)同時按下鼠標左鍵時提交此消息
★WM_NCLBUTTONUP 當用戶釋放鼠標左鍵同時光標某個窗口在非客戶區(qū)時發(fā)送此消息
★WM_NCLBUTTONDBLCLK 當用戶雙擊鼠標左鍵同時光標某個窗口在非客戶區(qū)時發(fā)送此消息
★WM_NCRBUTTONDOWN 當用戶按下鼠標右鍵同時光標又在窗口的非客戶區(qū)時發(fā)送此消息
★WM_NCRBUTTONUP 當用戶釋放鼠標右鍵同時光標又在窗口的非客戶區(qū)時發(fā)送此消息
★WM_NCRBUTTONDBLCLK 當用戶雙擊鼠標右鍵同時光標某個窗口在非客戶區(qū)時發(fā)送此消息
★WM_NCMBUTTONDOWN 當用戶按下鼠標中鍵同時光標又在窗口的非客戶區(qū)時發(fā)送此消息
★WM_NCMBUTTONUP 當用戶釋放鼠標中鍵同時光標又在窗口的非客戶區(qū)時發(fā)送此消息
★WM_NCMBUTTONDBLCLK 當用戶雙擊鼠標中鍵同時光標又在窗口的非客戶區(qū)時發(fā)送此消息
★WM_KEYFIRST
★WM_KEYDOWN 按下一個鍵
★WM_KEYUP 釋放一個鍵
★WM_CHAR 按下某鍵,并已發(fā)出WM_KEYDOWN, WM_KEYUP消息
★WM_DEADCHAR 當用translatemessage函數(shù)翻譯WM_KEYUP消息時發(fā)送此消息給擁有焦點的窗口
★WM_SYSKEYDOWN 當用戶按住ALT鍵同時按下其它鍵時提交此消息給擁有焦點的窗口
★WM_SYSKEYUP 當用戶釋放一個鍵同時ALT 鍵還按著時提交此消息給擁有焦點的窗口
★WM_SYSCHAR 當WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函數(shù)翻譯后提交此消息給擁有焦點的窗口
★WM_SYSDEADCHAR 當WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函數(shù)翻譯后發(fā)送此消息給擁有焦點的窗口
★WM_INITDIALOG 在一個對話框程序被顯示前發(fā)送此消息給它,通常用此消息初始化控件和執(zhí)行其它任務
★WM_COMMAND 當用戶選擇一條菜單命令項或當某個控件發(fā)送一條消息給它的父窗口,一個快捷鍵被翻譯
★WM_SYSCOMMAND 當用戶選擇窗口菜單的一條命令或當用戶選擇最大化或最小化時那個窗口會收到此消息
★WM_TIMER 發(fā)生了定時器事件
★WM_HSCROL★當一個窗口標準水平滾動條產(chǎn)生一個滾動事件時發(fā)送此消息給那個窗口,也發(fā)送給擁有它的控件
★WM_VSCROL★當一個窗口標準垂直滾動條產(chǎn)生一個滾動事件時發(fā)送此消息給那個窗口也,發(fā)送給擁有它的控件
★WM_INITMENU 當一個菜單將要被激活時發(fā)送此消息,它發(fā)生在用戶菜單條中的某項或按下某個菜單鍵,它允許程序在顯示前更改菜單
★WM_INITMENUPOPUP 當一個下拉菜單或子菜單將要被激活時發(fā)送此消息,它允許程序在它顯示前更改菜單,而不要改變?nèi)?br />★WM_MENUSelect 當用戶選擇一條菜單項時發(fā)送此消息給菜單的所有者(一般是窗口)
★WM_MENUCHAR 當菜單已被激活用戶按下了某個鍵(不同于加速鍵),發(fā)送此消息給菜單的所有者
★WM_ENTERIDLE 當一個模態(tài)對話框或菜單進入空載狀態(tài)時發(fā)送此消息給它的所有者,一個模態(tài)對話框或菜單進入空載狀態(tài)就是在處理完一條或幾條先前的消息后沒有消息它的列隊中等待
★WM_CTLCOLORMSGBOX 在windows繪制消息框前發(fā)送此消息給消息框的所有者窗口,通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置消息框的文本和背景顏色
★WM_CTLCOLOREDIT 當一個編輯型控件將要被繪制時發(fā)送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置編輯框的文本和背景顏色
★WM_CTLCOLORLISTBOX 當一個列表框控件將要被繪制前發(fā)送此消息給它的父窗口;通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置列表框的文本和背景顏色
★WM_CTLCOLORBTN 當一個按鈕控件將要被繪制時發(fā)送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置按紐的文本和背景顏色
★WM_CTLCOLORDLG 當一個對話框控件將要被繪制前發(fā)送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置對話框的文本背景顏色
★WM_CTLCOLORSCROLLBAR 當一個滾動條控件將要被繪制時發(fā)送此消息給它的父窗口,通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置滾動條的背景顏色
★WM_CTLCOLORSTATIC 當一個靜態(tài)控件將要被繪制時發(fā)送此消息給它的父窗口 通過響應這條消息,所有者窗口可以通過使用給定的相關顯示設備的句柄來設置靜態(tài)控件的文本和背景顏色
★WM_MOUSEFIRST
★WM_MOUSEMOVE 移動鼠標
★WM_LBUTTONDOWN 按下鼠標左鍵
★WM_LBUTTONUP 釋放鼠標左鍵
★WM_LBUTTONDBLCLK 雙擊鼠標左鍵
★WM_RBUTTONDOWN 按下鼠標右鍵
★WM_RBUTTONUP 釋放鼠標右鍵
★WM_RBUTTONDBLCLK 雙擊鼠標右鍵
★WM_MBUTTONDOWN 按下鼠標中鍵
★WM_MBUTTONUP 釋放鼠標中鍵
★WM_MBUTTONDBLCLK 雙擊鼠標中鍵
★WM_MOUSEWHEE★當鼠標輪子轉動時發(fā)送此消息個當前有焦點的控件
★WM_PARENTNOTIFY 當MDI子窗口被創(chuàng)建或被銷毀,或用戶按了一下鼠標鍵而光標在子窗口上時發(fā)送此消息給它的父窗口
★WM_ENTERMENULOOP 發(fā)送此消息通知應用程序的主窗口that已經(jīng)進入了菜單循環(huán)模式
★WM_EXITMENULOOP 發(fā)送此消息通知應用程序的主窗口that已退出了菜單循環(huán)模式
★WM_SIZING 當用戶正在調(diào)整窗口大小時發(fā)送此消息給窗口 通過此消息應用程序可以監(jiān)視窗口大小和位置也可以修改他們
★WM_CAPTURECHANGED 發(fā)送此消息 給窗口當它失去捕獲的鼠標時
★WM_MOVING 當用戶在移動窗口時發(fā)送此消息,通過此消息應用程序可以監(jiān)視窗口大小和位置也可以修改他們
★WM_POWERBROADCAST 此消息發(fā)送給應用程序來通知它有關電源管理事件
★WM_DEVICECHANGE 當設備的硬件配置改變時發(fā)送此消息給應用程序或設備驅動程序
★WM_MDIDESTROY 應用程序發(fā)送此消息給多文檔的客戶窗口來關閉一個MDI 子窗口
★WM_MDIACTIVATE 應用程序發(fā)送此消息給多文檔的客戶窗口通知客戶窗口激活另一個MDI子窗口,當客戶窗口收到此消息后,它發(fā)出WM_MDIACTIVE消息給MDI子窗口(未激活)激活它
★WM_MDIRESTORE 程序 發(fā)送此消息給MDI客戶窗口讓子窗口從最大最小化恢復到原來大小
★WM_MDINEXT 程序 發(fā)送此消息給MDI客戶窗口激活下一個或前一個窗口
★WM_MDIMAXIMIZE 程序發(fā)送此消息給MDI客戶窗口來最大化一個MDI子窗口
★WM_MDITILE 程序 發(fā)送此消息給MDI客戶窗口以平鋪方式重新排列所有MDI子窗口
★WM_MDICASCADE 程序 發(fā)送此消息給MDI客戶窗口以層疊方式重新排列所有MDI子窗口
★WM_MDIICONARRANGE 程序 發(fā)送此消息給MDI客戶窗口重新排列所有最小化的MDI子窗口
★WM_MDIGETACTIVE 程序 發(fā)送此消息給MDI客戶窗口來找到激活的子窗口的句柄
★WM_MDISETMENU 程序 發(fā)送此消息給MDI客戶窗口用MDI菜單代替子窗口的菜單
★WM_CUT 程序發(fā)送此消息給一個編輯框或combobox來刪除當前選擇的文本
★WM_COPY 程序發(fā)送此消息給一個編輯框或combobox來復制當前選擇的文本到剪貼板
★WM_PASTE 程序發(fā)送此消息給editcontrol或combobox從剪貼板中得到數(shù)據(jù)
★WM_CLEAR 程序發(fā)送此消息給editcontrol或combobox清除當前選擇的內(nèi)容
★WM_UNDO 程序發(fā)送此消息給editcontrol或combobox撤消最后一次操作
★WM_DESTROYCLIPBOARD 當調(diào)用ENPTYCLIPBOARD函數(shù)時 發(fā)送此消息給剪貼板的所有者
★WM_DRAWCLIPBOARD 當剪貼板的內(nèi)容變化時發(fā)送此消息給剪貼板觀察鏈的第一個窗口,它允許用剪貼板觀察窗口來顯示剪貼板的新內(nèi)容
★WM_PAINTCLIPBOARD 當剪貼板包含CF_OWNERDIPLAY格式的數(shù)據(jù)并且剪貼板觀察窗口的客戶區(qū)需要重畫
★WM_SIZECLIPBOARD 當剪貼板包含CF_OWNERDIPLAY格式的數(shù)據(jù)并且剪貼板觀察窗口的客戶區(qū)域的大小已經(jīng)改變是此消息通過剪貼板觀察窗口發(fā)送給剪貼板的所有者
★WM_ASKCBFORMATNAME 通過剪貼板觀察窗口發(fā)送此消息給剪貼板的所有者來請求一個CF_OWNERDISPLAY格式的剪貼板的名字
★WM_CHANGECBCHAIN 當一個窗口從剪貼板觀察鏈中移去時發(fā)送此消息給剪貼板觀察鏈的第一個窗口
★WM_HSCROLLCLIPBOARD 此消息通過一個剪貼板觀察窗口發(fā)送給剪貼板的所有者,它發(fā)生在當剪貼板包含CFOWNERDISPALY格式的數(shù)據(jù)并且有個事件在剪貼板觀察窗的水平滾動條上,所有者應滾動剪貼板圖象并更新滾動條的值
★WM_QUERYNEWPALETTE 此消息發(fā)送給將要收到焦點的窗口,此消息能使窗口在收到焦點時同時有機會實現(xiàn)他的邏輯調(diào)色板
★WM_PALETTEISCHANGING 當一個應用程序正要實現(xiàn)它的邏輯調(diào)色板時發(fā)此消息通知所有的應用程序
★WM_PALETTECHANGED 此消息在一個擁有焦點的窗口實現(xiàn)它的邏輯調(diào)色板后發(fā)送此消息給所有頂級并重疊的窗口,以此來改變系統(tǒng)調(diào)色板
★WM_HOTKEY 當用戶按下由REGISTERHOTKEY函數(shù)注冊的熱鍵時提交此消息
★WM_PRINT 應用程序發(fā)送此消息僅當WINDOWS或其它應用程序發(fā)出一個請求要求繪制一個應用程序的一部分
★WM_DDE_INITIATE = WM_DDE_FIRST + 0 一個DDE客戶程序提交此消息開始一個與服務器程序的會話來響應那個指定的程序和主題名
★WM_DDE_TERMINATE = WM_DDE_FIRST + 1 一個DDE應用程序(無論是客戶還是服務器)提交此消息來終止一個會話
★WM_DDE_ADVISE = WM_DDE_FIRST + 2 一個DDE客戶程序提交此消息給一個DDE服務程序來請求服務器每當數(shù)據(jù)項改變時更新它
★WM_DDE_UNADVISE = WM_DDE_FIRST + 3 一個DDE客戶程序通過此消息通知一個DDE服務程序不更新指定的項或一個特殊的剪貼板格式的項
★WM_DDE_ACK = WM_DDE_FIRST + 4 此消息通知一個DDE(動態(tài)數(shù)據(jù)交換)程序已收到并正處理WM_DDE_POKE,WM_DDE_EXECUTE,WM_DDE_DATA, WM_DDE_ADVISE, WM_DDE_UNADVISE, or WM_DDE_INITIAT消息
★WM_DDE_DATA = WM_DDE_FIRST + 5 一個DDE服務程序提交此消息給DDE客戶程序來傳遞個一數(shù)據(jù)項給客戶或通知客戶的一條可用數(shù)據(jù)項
★WM_DDE_REQUEST = WM_DDE_FIRST + 6 一個DDE客戶程序提交此消息給一個DDE服務程序來請求一個數(shù)據(jù)項的值
★WM_DDE_POKE = WM_DDE_FIRST + 7 一個DDE客戶程序提交此消息給一個DDE服務程序,客戶使用此消息來請求服務器接收一個未經(jīng)同意的數(shù)據(jù)項服務器通過答復WM_DDE_ACK消息提示是否它接收這個數(shù)據(jù)項
?
SendMessage與PostMessage的區(qū)別
1、首先是返回值意義的區(qū)別,我們先看一下 MSDN 里的聲明:
LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
BOOL PostMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
其中 4 個參數(shù)的意義是一樣的,返回值類型不同(其實從數(shù)據(jù)上看他們一樣是一個 32 位的數(shù),只是意義不一樣),LRESULT 表示的是消息被處理后的返回值,BOOL 表示的是消息是不是 Post 成功。
2、PostMessage 是異步的,SendMessage 是同步的。
PostMessage 只把消息放入隊列,不管消息是否被處理就返回,消息可能不被處理;而 SendMessage 等待消息被處理完了之后才返回,如果消息不被處理,發(fā)送消息的線程將一直被阻塞。
3、如果在同一個線程內(nèi),SendMessage 發(fā)送消息時,由 USER32.DLL 模塊調(diào)用目標窗口的消息處理程序,并將結果返回。SendMessage 在同一線程中發(fā)送消息并不入線程消息隊列。PostMessage 發(fā)送消息時,消息要先放入線程的消息隊列,然后通過消息循環(huán)分派到目標窗口(DispatchMessage)。
如果在不同線程內(nèi),SendMessage 發(fā)送消息到目標窗口所屬線程的消息隊列,然后發(fā)送消息的線程在 USER32.DLL 模塊內(nèi)監(jiān)視和等待消息處理,直到目標窗口處理完返回。SendMessage 在返回前還做了很多工作,比如,響應別的線程向它 SendMessage。Post 到別的線程時,最好用 PostThreadMessage 代替 PostMessage,PostMessage 的 hWnd 參數(shù)可以是 NULL,等效于 PostThreadMessage + GetCurrentThreadId。Post WM_QUIT 時,應使用 PostQuitMessage 代替。
4、系統(tǒng)只整編(marshal)系統(tǒng)消息(0 到 WM_USER 之間的消息),發(fā)送用戶消息(WM_USER 以上)到別的進程時,需要自己做整編。
用 PostMessage、SendNotifyMessage、SendMessageCallback 等異步函數(shù)發(fā)送系統(tǒng)消息時,參數(shù)里不可以使用指針,因為發(fā)送者并不等待消息的處理就返回,接受者還沒處理指針就已經(jīng)被釋放了。
5、在 Windows 2000/XP 里,每個消息隊列最多只能存放 10,000 個 Post 的消息,超過的還沒被處理的將不會被處理,直接丟掉。這個值可以改得更大:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows] USERPostMessageLimit,最小可以是 4000。
轉載于:https://www.cnblogs.com/94cool/archive/2011/05/26/2058015.html
總結
以上是生活随笔為你收集整理的转载:SendMessage()这个函数有很多奇妙的用途的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝色巨人将磁带定位为数据存储的集成归档层
- 下一篇: 什么叫做“假学习”?什么叫做“真学习”?