模仿鼠標事宜的完成思緒及代碼。本站提示廣大學習愛好者:(模仿鼠標事宜的完成思緒及代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是模仿鼠標事宜的完成思緒及代碼正文
模仿鼠標事宜,普通可以經由過程mouse_event()和SendInPut()兩種辦法。mouse_event()在windows前期版本中逐步被SendInPut()代替。SendInPut()模仿鼠標挪動的事宜中,標記位取值分歧,輸出坐標的意義也分歧。簡略來講就是,添加MOUSEEVENTF_ABSOLUTE標記位表現鼠標挪動是經由過程相對坐標定位,此時的坐標要經由過程轉換。光標在屏幕中被分紅65535個小塊,可以經由過程以下轉換:
double fx = x *(65535.0f / fScreenWidth);
double fy = y *(65535.0f / fScreenHeight);
若不應用MOUSEEVENTF_ABSOLUTE標記位,則坐標是絕對前一坐標的位移。
SendInPut()鼠標時光應用構造以下:
typedef struct tagMOUSEINPUT {
LONG dx;
LONG dy;
DWORD mouseData;
DWORD dwFlags;
DWORD time;
ULONG_PTR dwExtraInfo;
} MOUSEINPUT, *PMOUSEINPUT, FAR* LPMOUSEINPUT;
msdn中完全說明以下:
dx 鼠標的相對地位,或自前次鼠標事宜的活動量發生的dwFlags成員的值而定。鼠標的x坐標被指定為相對的數據,絕對於被指定為數據的挪動像素數。
dy 鼠標的相對地位,或自前次鼠標事宜的活動量發生的dwFlags成員的值而定。鼠標的y坐標被指定為相對的數據,絕對於被指定為數據的挪動像素數。
mouseData 假如dwFlags中包括MOUSEEVENTF_WHEEL,mouseData指定滾輪活動的量。正值表現滾輪向前扭轉,即闊別用戶,負值表現滾輪向後扭轉,即朝向用戶。滾輪被界說為WHEEL_DELTA,這是120。
上面代碼演示了鼠標的幾個詳細操作。
1、我如何能力在運用法式中模仿鼠標事宜?
有兩個API函數可使用:mouse_event()和SendInput();
2、應當應用哪一個API函數?
在Windows NT/2000/XP中,mouse_event()函數曾經被SendInput()函數已被代替的。是以,在這些操作體系上,你應當應用SendInput()函數。(除非你須要供給向後兼容性與Windows98等)。
3、若何應用SendInput()函數來模仿點擊鼠標左鍵?
void LeftClick ( )
{
INPUT Input={0};
// 左鍵按下
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
::SendInput(1,&Input,sizeof(INPUT));
// 左鍵抬起
::ZeroMemory(&Input,sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1,&Input,sizeof(INPUT));
}
4、若何應用SendInput()函數來模仿點擊鼠標右鍵?
void RightClick ( )
{
INPUT Input={0};
// 右鍵按下
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
::SendInput(1,&Input,sizeof(INPUT));
// 右鍵抬起
::ZeroMemory(&Input,sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;
::SendInput(1,&Input,sizeof(INPUT));
}
5、若何應用SendInput()函數模仿鼠標的挪動?
void MouseMove (int x, int y )
{
double fScreenWidth = ::GetSystemMetrics( SM_CXSCREEN )-1;
double fScreenHeight = ::GetSystemMetrics( SM_CYSCREEN )-1;
double fx = x*(65535.0f/fScreenWidth);
double fy = y*(65535.0f/fScreenHeight);
INPUT Input={0};
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
Input.mi.dx = fx;
Input.mi.dy = fy;
::SendInput(1,&Input,sizeof(INPUT));
}
6、若何應用SendInput()函數來模仿點擊鼠標中鍵?
void MiddleClick()
{
INPUT Input={0};
// 設置滾輪量
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_WHEEL;
Input.mi.mouseData = 500;
::SendInput(1,&Input,sizeof(INPUT));
}