現(xiàn)在有些情況下我們需要用鼠標(biāo)或鍵盤重復(fù)做某些操作,一次兩次還好,當(dāng)我們需要重復(fù)做100次或遠(yuǎn)程控制時,我們就需要用到鼠標(biāo)鍵盤操作。這時,我們就要用Windows.h來實現(xiàn)了。
目錄
相關(guān)函數(shù)
mouse_event
keybd_event
SetCursorPos
示例:
實現(xiàn)Ctrl + V?
實現(xiàn)隨機(jī)設(shè)置鼠標(biāo)位置
相關(guān)函數(shù):
首先,讓我們來學(xué)習(xí)幾個相關(guān)的函數(shù):
mouse_event
這個函數(shù)是用來模擬鼠標(biāo)事件的,函數(shù)原型如下:
VOID mouse_event(DWORD dwFlags, DWORD dx,DWORD dwFlags, OWORD dx, DWORD dy, DWORD dwData, DWORD dwExtralnfo);
?參數(shù):
????dwFlags:標(biāo)志位集,指定點擊按鈕和鼠標(biāo)動作的多種情況。此參數(shù)里的各位可以是下列值的任何合理組合:
????????????MOOSE_EVENTF_ABSOLOTE:表明參數(shù)dX,dy含有規(guī)范化的絕對坐標(biāo)。如果不設(shè)置此位,參數(shù)含有相對數(shù)據(jù):相對于上次位置的改動位置。此標(biāo)志可被設(shè)置,也可不設(shè)置,不管鼠標(biāo)的類型或與系統(tǒng)相連的類似于鼠標(biāo)的設(shè)備的類型如何
????????????MOOSEEVENTF_MOVE:表明發(fā)生移動。
????????????MOUSEEVENTF_LEFTDOWN:表明接按下鼠標(biāo)左鍵。
????????????MOUSEEVENTF_LEFTUP:表明松開鼠標(biāo)左鍵。
????????????MOUSEEVENTF_RIGHTDOWN:表明按下鼠標(biāo)右鍵。
????????????MOUSEEVENTF_RIGHTUP:表明松開鼠標(biāo)右鍵。
????????????MOUSEEVENTF_MIDDLEDOWN:表明按下鼠標(biāo)中鍵。
????????????MOUSEEVENTF_MIDDLEUP:表明松開鼠標(biāo)中鍵。
????????????MOUSEEVENTF_WHEEL:在Windows NT中如果鼠標(biāo)有一個輪,表明鼠標(biāo)輪被移動。移動的數(shù)量由dwData給出。
????dx:指定鼠標(biāo)沿x軸的絕對位置或者從上次鼠標(biāo)事件產(chǎn)生以來移動的數(shù)量,依賴于MOOSEEVENTF_ABSOLOTE的設(shè)置。給出的絕對數(shù)據(jù)作為鼠標(biāo)的實際X坐標(biāo);給出的相對數(shù)據(jù)作為移動的mickeys數(shù)。一個mickey表示鼠標(biāo)移動的數(shù)量,表明鼠標(biāo)已經(jīng)移動。
????dy:指定鼠標(biāo)沿y軸的絕對位置或者從上次鼠標(biāo)事件產(chǎn)生以來移動的數(shù)量,依賴于MOOSEEVENTF_ABSOLVTE的設(shè)置。給出的絕對數(shù)據(jù)作為鼠標(biāo)的實際y坐標(biāo),給出的相對數(shù)據(jù)作為移動的mickeys數(shù)。
????dwData:如果dwFlags為MOOSEEVENTF_WHEEL,則dwData指定鼠標(biāo)輪移動的數(shù)量。正值表明鼠標(biāo)輪向前轉(zhuǎn)動,即遠(yuǎn)離用戶的方向;負(fù)值表明鼠標(biāo)輪向后轉(zhuǎn)動,即朝向用戶。一個輪擊定義為WHEEL_DELTA,即120。
????如果dwFlagsS不是MOOSEEVENTF_WHEEL,則dWData應(yīng)為零。
????dwExtralnfo:指定與鼠標(biāo)事件相關(guān)的附加32位值。應(yīng)用程序調(diào)用函數(shù)GetMessgeExtrajnfo來獲得此附加信息。
????返回值:無。
keybd_event
這個函數(shù)是用來模擬鍵盤事件的,函數(shù)原型如下:
VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);
參數(shù):
? ? ?bVk:定義一個虛據(jù)擬鍵碼。鍵碼值必須在1~254之間,宏定義為 "VK_" 開頭。
?????bScan : 定義該鍵的硬件掃描碼,一般填 0 。
?????dwFlags:定義函數(shù)操作的名個方面的一個標(biāo)志位集。應(yīng)用程序可使用如下一些預(yù)定義常數(shù)的組合設(shè)置標(biāo)志位,常用按下為 0 ,彈起為 2 。
????????KEYEVENTF_EXETENDEDKEY:若指定該值,則掃描碼前一個值為OXEO(224)的前綴字節(jié)。
????????DEYEVENTF_KEYUP:若指定該值,該鍵將被釋放;若未指定該值,該鍵交被接下。dwExtralnfo:定義與擊鍵相關(guān)的附加的32位值,常填 0 。
?
??????返回值:無。
SetCursorPos
這個函數(shù)是用來設(shè)置鼠標(biāo)位置的,函數(shù)原型如下:
BOOL SetCursorPos(int X,int Y);
參數(shù):
????X:指定光標(biāo)的新的X坐標(biāo),以屏幕坐標(biāo)表示。
????Y:指定光標(biāo)的新的Y坐標(biāo),以屏幕坐標(biāo)表示。
????返回值:如果成功,返回非零值;如果失敗,返回值是零。
示例:
好了,接下來我給大家寫一些示例吧。文章來源:http://www.zghlxwxcb.cn/news/detail-484531.html
實現(xiàn)Ctrl + V :
#include <Windows.h>
int main()
{
//按下Ctrl鍵
keybd_event(VK_CONTROL, 0, 0, 0);
//按下V鍵(注意,當(dāng)?shù)谝粋€參數(shù)為字符時必須用單引號" ' "引起來)
keybd_event('V', 0, 0, 0);
//松開V鍵
keybd_event('V', 0, 2, 0);
//松開Ctrl鍵
keybd_event(VK_CONTROL, 0, 2, 0);
return 0;
}
實現(xiàn)隨機(jī)設(shè)置鼠標(biāo)位置:
#include <Windows.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int xWidth = GetSystemMetrics(SM_CXSCREEN); //獲取屏幕邊界x
int yHeight = GetSystemMetrics(SM_CYSCREEN); //獲取屏幕邊界y
// 設(shè)置隨機(jī)數(shù)種子
srand((unsigned)time(NULL));
// 隨機(jī)生成X坐標(biāo)
int x = rand() % xWidth;
// 隨機(jī)生成Y坐標(biāo)
int y = rand() % yHeight;
// 設(shè)置鼠標(biāo)位置
SetCursorPos(x, y);
return 0;
}
好了今天就給大家講到這里,謝謝大家,有問題歡迎在評論區(qū)討論。文章來源地址http://www.zghlxwxcb.cn/news/detail-484531.html
到了這里,關(guān)于C/C++ Windows.h 鼠標(biāo)鍵盤操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!