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下模拟鼠标点击吗?


参考资料:

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
wince6.0模拟器是一个车载式PC模拟器,英文全称为:windows embedded ce6.0,主要是使用在3D地图及软件模拟方面,像车载凯立德导航就可以完全的在wince6.0模拟器中使用。另外它集成了GPS模拟器(Virace GPS),可以非常轻松方便的去调试程序,且还有三种分辨率功用户选择,分别为:Skin_400x234、Skin_640X480、Skin_800X480,有需要的用户,可以来下载wince6.0模拟器在您的机车上使用哦! wince6.0模拟器 使用方法 1、下载好软件压缩包,节气解压好,双击运行里面的“先运行我进行注册.bat”,随后它就会提示注册成功。 2、然后就可以双击“Skin_400x234.bat”、“Skin_640X480.bat”、“Skin_800X480.BAT”三个中的其中一个,这三个本质上是一样的,只要分辨率的大小不同。 3、点击“文件”-“配置”-“常规”-“共享文件夹”。 4、点击"...",弹出选择文件夹,选择“凯立德地图文件夹”点击“确定”。 6、点击wince6.0模拟器界面中“我的设备”图标。 7、双击“SDMMC”(SDMMC就相当于你导航里面的一个SD卡或者说是导航仪的内置卡) 8、打开后,你就可以看到凯立德导航3D地图了。大功告成! 9、不知道大家发现没有,屏幕没有完全显示,被遮挡了一栏。遮盖怎么办呢?这也好办,没有我一箭穿心解决不了的。点击“开始”。 10、接下来点击“设置”“任务栏和开始菜单”,勾选“自动隐藏”“OK”。 怎样连接网络教程 1、打开VisualStudio 2008—>工具-->设备仿真器管理器-->选择安装的SDK(如图一)右键-->连接 2、配置模拟器文件-->配置-->网络-->勾选“启用NE2000 PCMCIA 网络适配器并绑定到(N)”在下拉框中选择“连接的网卡”或者PC机正在使用的网卡(如图二)-->确定 3、配置Windows Mobile 设备中心(Windows 7系统),XP系统是Microsott ActiveSync,配置都一样。 移动设备设置-->连接设置—>勾选所有的选择框-->允许连接到以下任一端口选择“DMA”—>这台计算机已连接到选择“自动”(这个地方要注意下有时候重新打开软件时这个配置可能没保存,所有需要重复选择“自动”、“单位网络”、“Internet”来测试是否能上网) 4、设备仿真器管理器-->选择连接的SDK右键-->插入底座(如图四) 配置完成在PC机的计算机中就能看到这个设备了 测试 在wince6.0模拟器中打开IE输入网址就能上网了 注意现在还不能上网的话请在设备中心的配置中“这台计算机已连接到”选择任意的选择项来测试 常见问题 一、wince6.0模拟器怎么打开地图? 答:xp用户需先安装Windows Installer 4.5和.NET Framework 2.0 SP2 已经安装过因为注册列表已注入WINDOWS,有些版本限制了重复安装,只有重做系统。 bluestacks app player版本不一,最新版最新版 BlueStacks App Player 0.7.7.813_RELXP/Win7版 100.1 M 这个模拟器对系统和电脑配置要求都很挑剔,有时安装成功未必可以运行应用,能否成功还是要看电脑配置 二、wince6.0模拟器怎么在vs上调试? 答:环境配置:启动Jenkins? 1、安装jdk 从略,建议1.6或以上版本,配置好环境变量。 2、安装tomcat 从略,安装完调试下tomcat是否正常。 3、安装ant 下载zip包,解压后配置好环境变量。 4、安装jenkins 下载war包,命名为Jenkins,拷贝到tomcat 一个独立的部署系统需要包括的内容是非常丰富的(绝对不仅仅是Jenkins部署插件要做的那些事情)。部署系统需要连接项目中涉及的人、环境、制品库以及构建环境等,只不过这种连接的目的是打通从制品到最终服务的整个流程 。 三、wince模拟器怎么修改分辨率 答:点右键-编辑-修改最后一句cd C:\Program Files\Microsoft Device Emulator\1.0 DeviceEmulator.exe CE50_ARM_CHS.bin /memsize 128 /s TMP.dess /video 320x300x16 3.5的是320x300x16 4.3的是480x300x16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值