1. 程式人生 > >滑鼠移動/點選事件

滑鼠移動/點選事件

這個函式在user32.dll這個庫檔案裡面。我們可以在C:\WINDOWS\system32(XP系統)這個目錄下找到這個檔案,他是系統自帶的。 我們以C#直接呼叫這個檔案中的API為例子來說下怎麼進行滑鼠操作,首先在我們C#中宣告引用,如果是一個基於From的程式,這個宣告的位置寫在你的From class就可以了 

[System.Runtime.InteropServices.DllImport("user32")] 
private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); 


引數 意義 
dwFlags Long,下表中標誌之一或它們的組合 
dx,dy Long,根據MOUSEEVENTF_ABSOLUTE標誌,指定x,y方向的絕對位置或相對位置 
cButtons Long,沒有使用 
dwExtraInfo Long,沒有使用 

dwFlags常數 意義 

const int MOUSEEVENTF_MOVE = 0x0001;      移動滑鼠 
const int MOUSEEVENTF_LEFTDOWN = 0x0002; 模擬滑鼠左鍵按下 
const int MOUSEEVENTF_LEFTUP = 0x0004; 模擬滑鼠左鍵擡起 
const int MOUSEEVENTF_RIGHTDOWN = 0x0008; 模擬滑鼠右鍵按下 

const int MOUSEEVENTF_RIGHTUP = 0x0010; 模擬滑鼠右鍵擡起 
const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; 模擬滑鼠中鍵按下 
const int MOUSEEVENTF_MIDDLEUP = 0x0040; 模擬滑鼠中鍵擡起 
const int MOUSEEVENTF_ABSOLUTE = 0x8000; 標示是否採用絕對座標 


程式中我們直接呼叫mouse_event函式就可以了 
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0); 

1、這裡是滑鼠左鍵按下和鬆開兩個事件的組合即一次單擊: 

mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ) 

2、模擬滑鼠右鍵單擊事件: 
mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 ) 

3、兩次連續的滑鼠左鍵單擊事件 構成一次滑鼠雙擊事件: 
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ) 
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ) 

4、使用絕對座標 
MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0 

需要說明的是,如果沒有使用MOUSEEVENTF_ABSOLUTE,函式預設的是相對於滑鼠當前位置的點,如果dx,和dy,用0,0表示,這函式認為是當前滑鼠所在的點。5、直接設定絕對座標並單擊 
mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0); 
mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0); 
其中X,Y分別是你要點選的點的橫座標和縱座標 

而鍵盤模擬用 Keybd_event() 

Keybd_event能觸發一個按鍵事 件,也就是說回產生一個WM_KEYDOWN或WM_KEYUP訊息。當然也可以用產生這兩個訊息來模擬按鍵,但是沒有直接用這個函式方便。 Keybd_event共有四個引數,第一個為按鍵的虛擬鍵值,如回車鍵為vk_return, tab鍵為vk_tab。第二個引數為掃描碼,一般不用 設定,用0代替就行。第三個引數為選項標誌,如果為keydown則置0即可,如果為keyup則設成“KEYEVENTF_KEYUP”,第四個引數一 般也是置0即可。用如下程式碼即可實現模擬按下i鍵,其中的 49 表示 i 鍵的虛擬鍵值: