700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > WINCE下模拟鼠标点击 移动

WINCE下模拟鼠标点击 移动

时间:2019-03-06 21:30:03

相关推荐

WINCE下模拟鼠标点击 移动

最近进行一个车载项目,碰到这样的需求:通过串口接收鼠标的按下/弹起和坐标消息,在WINCE下模拟鼠标消息.经过努力,得出了两个方案:

1.使用广播发送鼠标消息

2.使用mouse_event.实际测试的时候

经过测试,发现广播发送鼠标消息效果不佳:

int x = 100;int y = 100;PostMessage((IntPtr)HWND_BROADCAST, WM_LBUTTONDOWN, (IntPtr)0, (IntPtr)(y << 16 | x));PostMessage((IntPtr)HWND_BROADCAST, WM_LBUTTONUP, (IntPtr)0, (IntPtr)(y << 16 | x));PostMessage((IntPtr)HWND_BROADCAST, WM_MOUSEMOVE, (IntPtr)1, (IntPtr)(y << 16 | x));

具体表现为在普通的点击(DOWN, UP)没有太大问题, 但是对于车载导航的手写, 就写不出来了(没有找到原因, 可能是车载倒车不仅仅需要MOVE消息, 还需要TOUCH消息吧, 我从下文反推回来的). 所以就采用了mouse_event的方法.

鼠标按下:mouse_event(MOUSEEVENTF_TOUCH | MOUSEEVENTF_ABSOLUTE, dx, dy, 0, 0);mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE, dx, dy, 0, 0);鼠标移动:mouse_event(MOUSEEVENTF_TOUCH | MOUSEEVENTF_ABSOLUTE, dx, dy, 0, 0);mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, dx, dy, 0, 0);鼠标弹起:mouse_event(MOUSEEVENTF_TOUCH | MOUSEEVENTF_ABSOLUTE, dx, dy, 0, 0);mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_ABSOLUTE, dx, dy, 0, 0);

这里特别说明:

在wince上面, 需要先发送一个MOUSEEVENTF_TOUCH, 然后再发送MOUSEEVENTF_LEFTDOWN, MOVE, UP消息.

如果指定了MOWSEEVENTF_ABSOLOTE值,则dx和dy含有标准化的绝对坐标,其值在0到65535之间。事件程序将此坐标映射到显示表面。坐标(0,0)映射到显示表面的左上角,(6553,65535)映射到右下角, 这一点一定要注意, 我在这里就吃过亏, 我先前是直接将坐标传入, 没有进行一个转化.

转化的方法, 如果是800 * 480分辨率

int x = 300;int y = 300;int dx = x * 65535 / 800;int dy = y * 65535 / 480;

可能上面代码中有些常量定义值找不到, 这里就给出了(造福使用C#的小伙伴们, 我也是一个使用C#的可怜家伙.)

const int MOUSEEVENTF_MOVE = 0x0001;//移动鼠标 const int MOUSEEVENTF_LEFTDOWN = 0x0002; //模拟鼠标左键按下 const int MOUSEEVENTF_LEFTUP = 0x0004; //模拟鼠标左键抬起 const int MOUSEEVENTF_RIGHTDOWN = 0x0008; //模拟鼠标右键按下 const int MOUSEEVENTF_RIGHTUP = 0x0010; //模拟鼠标右键抬起 const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; //模拟鼠标中键按下 const int MOUSEEVENTF_MIDDLEUP = 0x0040; //模拟鼠标中键抬起 const int MOUSEEVENTF_ABSOLUTE = 0x8000; //标示是否采用绝对坐标 const int MOUSEEVENTF_TOUCH = 0x100000;

写下此文的目的是给有同样有需求的人以启发. 我会告诉你我花了一天时间来实现CE下模拟鼠标点击吗?

参考资料:

/xiaolei05/article/details/6665438

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。