Windows下C/C++模拟鼠标点击,没有鼠标怎么获取鼠标坐标、移动鼠标坐标、模拟鼠标点击事件?方法二 亲测有效

——————— 【 转载请保留 】 ———————
作者:西_瓜_瓜
博客:https://blog.csdn.net/xi_gua_gua/article/details/105774399
——————— 【 谢谢合作 】 ————————

在使用PC端开发应用时,没有鼠标设备的情况下实现由一个前台程序触发来实现底层程序的触发,如模拟鼠标的点击事件,键盘等
模拟鼠标操作 mouse_event是比较旧的API,新的API名为SendInput,坐标以屏幕的左上角为原点,单位是像素点。拔掉鼠标,也能在相应的坐标点发送点击事件。

	if (key == KZS_KEY_ENTER)
	{
		//点击
		MouseMove(100, 100);
		MouseLeftDown();
		Sleep(10);
		MouseLeftUp();

		//SetCursorPos(100, 100);
		//mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
		//Sleep(10);
		//mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
	}
	
	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));
	}

	void MouseLeftDown()//鼠标左键按下
	{
		INPUT  Input = { 0 };
		Input.type = INPUT_MOUSE;
		Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
		SendInput(1, &Input, sizeof(INPUT));
	}

	void MouseLeftUp()//鼠标左键放开
	{
		INPUT  Input = { 0 };
		Input.type = INPUT_MOUSE;
		Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
		SendInput(1, &Input, sizeof(INPUT));
	}

——————— 【 转载请保留 】 ———————
作者:西_瓜_瓜
博客:https://blog.csdn.net/xi_gua_gua/article/details/105774399
——————— 【 谢谢合作 】 ————————

你可能感兴趣的:(C/C++,window,c++,c语言)