SendMessage用法實例


轉: http://blog.csdn.net/coolszy/article/details/5523700

SendMessage用法

windowsbuttonmenucommandlistc#
函數功能:該函數將指定的消息發送到一個或多個窗口。此函數為指定的窗口調用窗口程序,直到窗口程序處理完消息再返回。該函數是應用程序和應用程序之間進行消息傳遞的主要手段之一。
函數原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);

參數:

hWnd:其窗口程序將接收消息的窗口的句柄。如果此參數為HWND_BROADCAST,則消息將被發送到系統中所有頂層窗口,包括無效或不可見的非自身擁有的窗口、被覆蓋的窗口和彈出式窗口,但消息不被發送到子窗口。

Msg:指定被發送的消息。

wParam:指定附加的消息指定信息。

IParam:指定附加的消息指定信息。

返回值:返回值指定消息處理的結果,依賴於所發送的消息。

備注:需要用HWND_BROADCAST通信的應用程序應當使用函數RegisterWindowMessage來為應用程序間的通信取得一個唯一的消息。

如果指定的窗口是由調用線程創建的,則窗口程序立即作為子程序調用。如果指定的窗口是由不同線程創建的,則系統切換到該線程並調用恰當的窗口程序。線程間的消息只有在線程執行消息檢索代碼時才被處理。發送線程被阻塞直到接收線程處理完消息為止。

 

C#中使用該函數首先導入命名空間:

[c-sharp] view plaincopy

using System.Runtime.InteropServices;

 

然后寫API引用部分的代碼,放入 class 內部

 

[c-sharp] view plaincopy

[DllImport("user32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

這個函數有四個參數,第一個是窗口句柄,窗口可以是任何類型的屏幕對象;第二個是用於區別其他消息的常量值;第三個通常是一個與消息有關的常量值,也可能是窗口或控件的句柄,第三個參數是可選參數,有的消息要,有的不需要,比如單擊就不需要這個參數,
別的消息,比如鼠標移動的可能需要在這里加上一些鼠標的參數;第四個通常是一個指向內存中數據的指針。在C#中消息需要定義成windows系統中的原始的16進制數字,比如 const int WM_Lbutton = 0x201; //定義了鼠標的左鍵點擊消息。詳細值在最后。

例如:

 

[c-sharp] view plaincopy

const int BM_CLICK = 0xF5;
IntPtr maindHwnd = FindWindow(null, "QQ用戶登錄"); //獲得QQ登陸框的句柄
if (maindHwnd != IntPtr.Zero)
{
IntPtr childHwnd = FindWindowEx(maindHwnd, IntPtr.Zero, null, "登錄"); //獲得按鈕的句柄
if (childHwnd != IntPtr.Zero)
{
SendMessage(childHwnd, BM_CLICK, 0, 0); //發送點擊按鈕的消息
}
else
{
MessageBox.Show("沒有找到子窗口");
}
}
else
{
MessageBox.Show("沒有找到窗口");

 

[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx( IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow );

 

[DllImport("user32.dll", EntryPoint = "FindWindow")]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);

不過貌似現在FindWindowEx獲取不到登錄句柄了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM