前言
Windows支持最多五个按钮的鼠标:左侧、中间和右侧,另外还有两个称为 XBUTTON1 和 XBUTTON2 的按钮。
大多数用于Windows的鼠标至少有左右按钮。 鼠标左键用于指向、选择、拖动等。 鼠标右键通常显示上下文菜单。 一些鼠标在左右按钮之间有一个滚轮。 根据鼠标,滚轮可能也可以单击,使其成为中间按钮。
XBUTTON1 和 XBUTTON2 按钮通常位于鼠标两侧,靠近基础。 这些额外的按钮在所有鼠标上都不存在。 如果存在,则 XBUTTON1 和 XBUTTON2 按钮通常映射到应用程序函数,例如 Web 浏览器中的向前导航和向后导航。
左侧用户通常发现交换左右按钮的功能更舒服—使用右按钮作为指针,左侧按钮显示上下文菜单。 因此,Windows帮助文档使用术语主按钮和辅助按钮,该按钮是指逻辑函数而不是物理放置。 在默认 (右手) 设置中,左侧按钮是主按钮,右侧是辅助按钮。 但是,术语 右键单击 , 左键单击 引用逻辑操作。 左键 表示单击主按钮,无论该按钮是鼠标右侧还是左侧。
无论用户如何配置鼠标,Windows都会自动翻译鼠标消息,使其保持一致。 用户可在使用程序中间交换主按钮和辅助按钮,不会影响程序的行为方式。
MSDN 文档使用 术语左侧按钮 和 向右按钮 表示 主 按钮和 辅助 按钮。 此术语与鼠标输入的窗口消息的名称一致。 只需记住,可能会交换物理左右按钮。
上代码
//#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
#include <iostream>
#include <Windows.h>
#include<time.h>
void Mouse_Move(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);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, fx, fy, 0, 0);
}
//模拟鼠标点击 (x,y)是要点击的位置
void LeftClick(int x, int y)
{
//将鼠标光标移动到 指定的位置 例子中屏幕分辨率1600x900 在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x * 65535 / 1440, y * 65535 / 900, 0, 0);
Sleep(50);//稍微延时50ms
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//鼠标左键按下
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//鼠标左键抬起
}
void RightClick(int x, int y)
{
//将鼠标光标移动到 指定的位置 例子中屏幕分辨率1600x900 在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, x * 65535 / 1440, y * 65535 / 900, 0, 0);
Sleep(50);//稍微延时50ms
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);//鼠标左键按下
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);//鼠标左键抬起
}
int main()
{
//POINT p;
//::GetCursorPos(&p);
//Mouse_Move(p.x + 440, p.y + 50);
srand((unsigned)time(NULL));
int i;
while (1) {
Sleep(3000);
printf("%d\n", (855 + rand() % 8));
//RightClick(1270, (855 + rand() % 8));
RightClick(800, (300 + rand() % 8));
}
return 0;
}
本文正在参加「金石计划 . 瓜分6万现金大奖」