不同視窗程式可以通過訊息進行互動,主要用到的函式如下:
獲取乙個視窗的控制代碼。
hwnd findwindow( lpctstr lpclassname,// 類名 lpctstr lpwindowname// 視窗名 );
通過在引數中傳遞乙個類名或者視窗名就可以返回乙個視窗的控制代碼,類名可以通過spy++獲取,視窗名是指視窗的標題。
傳送乙個不進隊訊息
lresult sendmessage( hwnd hwnd,// 視窗控制代碼 uint msg,// 訊息型別 wparam wparam,// 附加引數 lparam lparam// 附加引數 )
一般情況下,findwindow呼叫完以後獲取到視窗的控制代碼,然後會呼叫這個函式進行傳送訊息。
msg用來傳遞訊息型別,一般使用以下幾種:
wm_close:關閉視窗
wm_settext:對視窗文字進行設定
wm_gettext:獲取視窗文字
wm_mousemove:移動滑鼠
wm_lbuttondown:按下滑鼠左鍵
一般來說,發訊息用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);
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)
傳送滑鼠訊息
void mouse_event( dword dwflags, dword dx, dword dy, dword dwdata )
舉個簡單的例子:
m_hwnd = findwindow(null,"test");
setforegroundwindow(m_hwnd);
point pt = ;
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);
windows訊息機制
一 windows中有乙個系統訊息佇列,對於每乙個正在執行的windows應用程式,系統為其建立乙個 訊息佇列 即應用程式佇列,用來存放該程式可能 建立的各種視窗的訊息。應用程式中含有一段稱作 訊息迴圈 的 用來從訊息佇列中檢索這些訊息並把它們分發到相應的視窗函式中。二 windows為當前執行的每...
windows訊息機制
一 windows中有乙個系統訊息佇列,對於每乙個正在執行的windows應用程式,系統為其建立乙個 訊息佇列 即應用程式佇列,用來存放該程式可能 建立的各種視窗的訊息。應用程式中含有一段稱作 訊息迴圈 的 用來從訊息佇列中檢索這些訊息並把它們分發到相應的視窗函式中。二 windows為當前執行的每...
Windows訊息機制
訊息佇列分為 系統訊息佇列 執行緒訊息佇列 應用程式訊息佇列 系統訊息佇列 這是系統唯一的佇列,輸入裝置 滑鼠 鍵盤等 的驅動程式把使用者的操作轉換成訊息的形式放置到系統佇列中,然後系統會把此訊息轉到目標視窗所在的執行緒訊息佇列中等待處理。執行緒訊息佇列 每個gui 圖形使用者 介面 graphic...