獲取鼠標(biāo)位置的函數(shù)源代碼來(lái)自:C++【認(rèn)知系列】實(shí)時(shí)獲取鼠標(biāo)坐標(biāo)_c++ 獲取鼠標(biāo)坐標(biāo)_Zalamp的博客-CSDN博客
鼠標(biāo)點(diǎn)擊操作代碼來(lái)自:
C++控制鼠標(biāo)移動(dòng)到指定位置并且左鍵點(diǎn)擊_c++鼠標(biāo)移動(dòng)_蜚語(yǔ)77的博客-CSDN博客
在特定程序中實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊操作分為兩步,第一步就是在任務(wù)欄點(diǎn)擊一下鼠標(biāo),然后在打開(kāi)的窗口里再點(diǎn)擊特定按鈕。需要用到兩個(gè)函數(shù)被我整合了一下。一個(gè)就是獲取位置的函數(shù),在10s(當(dāng)然要看多久可以自己調(diào)整)內(nèi)獲取到任務(wù)欄和特定窗口中按鈕的位置;另一個(gè)就是將位置坐標(biāo)輸入后讓程序?qū)崿F(xiàn)點(diǎn)擊操作的函數(shù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-659439.html
全部代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-659439.html
#include <windows.h>
#include <iostream>
#include <iomanip> //setw()函數(shù)所在庫(kù)
#include<stdlib.h>
#include<time.h>
using namespace std;
void get_position()
{//獲取鼠標(biāo)位置坐標(biāo)
CONSOLE_CURSOR_INFO info = { 1, 0 }; //創(chuàng)建光標(biāo)的屬性結(jié)構(gòu)體
HANDLE hand = GetStdHandle(STD_OUTPUT_HANDLE); //創(chuàng)建光標(biāo)的句柄
COORD coord = { 0, 0 }; //創(chuàng)建xy坐標(biāo)結(jié)構(gòu)體,用于設(shè)置光標(biāo)位置
POINT pt = { 0, 0 }; //創(chuàng)建鼠標(biāo)點(diǎn)坐標(biāo)變量
SetConsoleCursorInfo(hand, &info); //設(shè)置光標(biāo)屬性
//循環(huán)顯示
int t = 100;//程序?qū)⒃?0s后退出
while (1) {
SetConsoleCursorPosition(hand, coord); //傳入光標(biāo)句柄和坐標(biāo)設(shè)置光標(biāo)位置
GetCursorPos(&pt); //獲取鼠標(biāo)點(diǎn)的坐標(biāo)位置
cout << "當(dāng)前坐標(biāo):" << pt.x << ',' << pt.y << setw(10) << "\0" << endl; //輸出坐標(biāo)
cout << "程序?qū)⒃? << t / 10 << "s后繼續(xù) " << endl;;//在這段時(shí)間內(nèi)可以獲取想要點(diǎn)擊的目標(biāo)的坐標(biāo)
Sleep(100);
if (t == 0) {break; }
t = t - 1;
}
//循環(huán)顯示結(jié)束
}
int mouseclick(int x,int y)
{
// 模擬鼠標(biāo)左鍵單擊
INPUT input; //創(chuàng)建一個(gè)INPUT類型結(jié)構(gòu)體
input.type = INPUT_MOUSE; //指定輸入事件類型為鼠標(biāo)事件
input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; // 模擬鼠標(biāo)左鍵按下和抬起的動(dòng)作
//mi是結(jié)構(gòu)體INPUT的一個(gè)成員屬性,mi是MOUSEINPUT類型
//MOUSEINPUT 結(jié)構(gòu)體用于描述鼠標(biāo)事件,例如鼠標(biāo)左鍵單擊、雙擊、右鍵單擊、移動(dòng)等操作。
SetCursorPos(x, y);
input.mi.dx = 0; //設(shè)置鼠標(biāo)事件發(fā)生的x坐標(biāo)
input.mi.dy = 0; //設(shè)置鼠標(biāo)事件發(fā)生的y坐標(biāo)
input.mi.mouseData = 0; //設(shè)置鼠標(biāo)滾輪的滾動(dòng)距離
input.mi.dwExtraInfo = 0; //將 dwExtraInfo 字段設(shè)置為 0,表示不傳遞任何附加的輸入數(shù)據(jù)。
input.mi.time = 0; //time字段是用來(lái)設(shè)置時(shí)間戳的,0表示使用系統(tǒng)的時(shí)間戳
SendInput(1, &input, sizeof(INPUT));
/*SendInput函數(shù)是 Win32 API 中用于模擬輸入事件的函數(shù),可以模擬鼠標(biāo)事件、鍵盤(pán)事件、硬件事件
等。
其函數(shù)原型如下:
UINT SendInput(UINT nInputs, LPINPUT pInputs, int cbSize);
其中,nInputs 參數(shù)指定輸入事件的數(shù)量,pInputs 參數(shù)指向輸入事件數(shù)組的指針,cbSize 參數(shù)指定輸
入事件數(shù)組的大?。▎挝粸樽止?jié))。*/
return 0;
}
int main()
{
//首先獲取到需要點(diǎn)擊的位置坐標(biāo)序列,這個(gè)函數(shù)調(diào)試時(shí)使用,獲取到坐標(biāo)簡(jiǎn)后可以注釋掉
get_position();
// 將鼠標(biāo)移動(dòng)到特定的位置并單擊,打開(kāi)之前最小化到任務(wù)欄的程序
mouseclick(400, 1068);
//讓程序睡眠1s再運(yùn)行
cout << "sleep 0.01s" << endl;
Sleep(10);
// 將鼠標(biāo)移動(dòng)到特定的位置并單擊,在特定程序中執(zhí)行點(diǎn)擊操作
mouseclick(1055, 578);
return 0;
}
到了這里,關(guān)于C++實(shí)現(xiàn)【獲取鼠標(biāo)位置】以及控制鼠標(biāo)【打開(kāi)窗口并點(diǎn)擊】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!