Mouse For Winpad

Mouse For Winpad

用WIN10的平板模式玩游戏总会到一些兼容性问题,之前在推Re:LieF的时候就遇到了触屏不能像鼠标指针一样进行游戏,于是猜想一定是程序没进行标准化MFC的编程。于是自己写了一个假窗口模拟鼠标,传递鼠标消息给游戏程序来实现点击。

源码在 Link to (GitHub)[https://github.com/oplusx/MouseForWinPad]

开发思路

  1. WINDOWS系统下,窗口之间通过WM_MESSAGE消息进行信息传递
  2. 鼠标的移动和点击也是通过消息传递来实现的
  3. 每个窗口都有一个句柄的概念HWND
  4. 向某HWND传递WM_MESSAGE就是最简单那的模拟

实现方法

  1. 获取当前需要传递消息的窗口句柄
void CMouseForWinPadDlg::OnBnClickedSet()
{
	RECT rect;
	this->GetWindowRect(&rect);//利用当前窗口所在的位置取左上角往外偏移1像素位置的窗口
	LONG x = rect.left - 1;
	LONG y = rect.top - 1;
	POINT testPoint;
	CWnd* testWnd = WindowFromPoint(testPoint);
	if (testWnd != NULL)
	{
		while (testWnd->GetParent() != NULL)
		{
			testWnd = testWnd->GetParent();
		}
		m_hTarget = testWnd->m_hWnd;//获得句柄
	}
}
  1. 向窗口传递消息
LONG lParam = MAKELPARAM(m_lTargetX, m_lTargetY);//目标窗口左上角为零点,所生成的相对坐标
::SetCursorPos(m_lAbsoluteX, m_lAbsoluteY);//设置指针的绝对坐标
::SendMessage(m_hTarget, WM_MOUSEMOVE, 0, lParam);
::SendMessage(m_hTarget, WM_LBUTTONDOWN, 0, lParam);
::PostMessage(m_hTarget, WM_LBUTTONUP, 0, lParam);

写在最后

WIN10的触屏体验多少有些欠缺的哦,否则用WIN平板玩GAL还是非常舒适的,特别是躺在床上无脑戳戳戳。

posted @ 2018-10-07 20:12  OpLusX  阅读(243)  评论(0编辑  收藏  举报