WINCE下模拟鼠标点击,移动

来源:互联网 发布:2017好看的日剧 知乎 编辑:程序博客网 时间:2024/04/28 08:01

最近进行一个车载项目碰到这样的需求通过串口接收鼠标的按下/弹起和坐标消息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下模拟鼠标点击吗?


参考资料:

http://blog.csdn.net/xiaolei05/article/details/6665438


0 0
原创粉丝点击