Windows程序和消息機制(二):消息有關的函數

不同窗口程序可以通過消息進行交互,主要用到的函數如下:

FindWindow

獲取一個窗口的句柄。

HWND FindWindow( LPCTSTR lpClassName,// 類名 LPCTSTR lpWindowName// 窗口名 );

通過在參數中傳遞一個類名或者窗口名就可以返回一個窗口的句柄,類名可以通過spy++獲取,窗口名是指窗口的標題。

SendMessage

發送一個不進隊消息

LRESULT SendMessage( HWND hWnd,// 窗口句柄 UINT Msg,// 消息類型 WPARAM wParam,// 附加參數 LPARAM lParam// 附加參數 )

一般情況下,FindWindow調用完以後獲取到窗口的句柄,然後會調用這個函數進行發送消息。

Msg用來傳遞消息類型,一般使用以下幾種:

WM_CLOSE:關閉窗口

WM_SETTEXT:對窗口文本進行設置

WM_GETTEXT:獲取窗口文本

WM_MOUSEMOVE:移動鼠標

WM_LBUTTONDOWN:按下鼠標左鍵

PostMessage

一般來說,發消息用SendMessage就可以了,但是如果要發送鍵盤消息最好使用PostMessage,因爲用SendMessage不太可能發送成功。

BOOL PostMessage( HWND hWnd,// 窗口句柄 UINT Msg,// 消息類型 WPARAM wParam,// 按鍵類型 LPARAM lParam,// 時間 )

消息類型主要有以下兩種:

WM_KEYUP:按鍵擡起

WM_KEYDOWN:按鍵按下

按鍵類型有很多種,比如說:

VK_F5:F5鍵

舉個應用的例子:

PostMessage(hWnd,WM_KEYDOWN,VK_F5,1); PostMessage(hWnd,WM_KEYUP,VK_F5,1);

keybd_event

VOID keybd_event( BYTE bVk, BYTE bScan, DWORD dwFlags, ULONG_PTR dwExtraInfo );

爲了方便模擬發送鍵盤消息,系統提供了這個函數,這個函數不需要提供窗口句柄,默認會向當前激活的窗口發消息,因此需要向指定的窗口發消息需要先將窗口激活,發一小段代碼就明白這個函數的使用方法了。

m_hWnd = FindWindow(NULL,"test"); setForegroundWindow(m_hWnd);//激活窗口 keybd_event(VK_F5,0,0,0)

mouse_event

發送鼠標消息

VOID mouse_event( DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData )

舉個簡單的例子:

m_hWnd = FindWindow(NULL,"test"); 
SetForegroundWindow(m_hWnd); 
POINT pt = {0}; 
ClientToScreen(m_hWnd,&pt); 
SetCursorPos(pt.x + 36,pt.y + 395); 
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); 
Sleep(1000); 
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章