目前我们还能看到的主要是光机鼠标和光学鼠标,它们也是当前鼠标技术的主流形态。其中,光机鼠标为过去的主流,我们一般也将它俗称作“机械鼠标”。至于光学鼠标,则是鼠标技术的发展方向,目前它已经开始大面积取代过时的光机鼠标产品,下面简单的介绍一下它们:
机械鼠标通过引入光学技术来提高鼠标的定位精度,它拥有一个胶质的小滚球,并连接着X/Y转轴,带两个带有栅缝的光栅码盘,并且增加了发光二极管和感光芯片。当鼠标在桌面上移动时,滚球会带动X/Y转轴的两只光栅码盘转动,X/Y发光二极管发出的光便会照射在光栅码盘上,由于光栅码盘存在栅缝,在恰当时机二极管发射出的光便可透过栅缝直接照射在带感光芯片检测芯片上。检测芯片会识别这些信号并送入专门的控制芯片内运算生成对应的坐标偏移量,以确定光标在屏幕上的位置并格式化为数据流,再由专门的USB协议芯片打包后将移动信息发送给主机。
光学鼠标的底部没有小滚球,其核心部件是发光二极管、微型摄像头、光学引擎和控制芯片。工作时发光二极管发射光线照亮鼠标底部的表面,同时微型摄像头以一定的时间间隔不断进行图像拍摄。鼠标在移动过程中产生的不同图像传送给光学引擎进行数字化处理,最后再由光学引擎中的定位DSP芯片对所产生的图像数字矩阵进行分析。由于相邻的两幅图像总会存在相同的特征,通过对比这些特征点的位置变化信息,便可以判断出鼠标的移动方向与距离,这个分析结果最终被转换为坐标偏移量实现光标的定位。
在端游盛行的时代,由于鼠标键盘被认为是最普遍的输入工具,于是几乎所有端游都是通过鼠标键盘的控制来输入用户的操作,在这种情况下,游戏厂家之间越来越卷,输入操作越来越复杂,在早期的金庸群侠传/传奇的时代,鼠标键盘的操作都非常机械化;后来引入CS等实时对战游戏后,对鼠标的灵敏度有更高的要求;到了出现一些动作格斗类游戏的时候,按键也越来越丰富。
游戏的火爆也给鼠标宏的出现带来的足够的需求,一开始,鼠标厂家们会不断提高精准度,但是当精准度达到某个瓶颈之后,易用性就开始卷起来了,很多大面积的流行游戏都对鼠标键盘的发展给出了自己的贡献,例如说上下左右按键的定义WSAD,在许多键盘上都使用特殊的颜色标出。同时一些厂家开始推出可编程鼠标,下面是Razer雷蛇鼠标蝰蛇的例子:
从上图可以看到,这个鼠标一共提供7个可编程按键,可以使用它官方的软件来对鼠标进行编程,从而实现按键触发,一开始会很别扭,后面慢慢就习惯了。
前面的机械鼠标、光电鼠标。可编程鼠标都是比较主流的命名,这个辅助输入器本身不是标准命名而是描述。
原因是这样的,在前面一直没怎么提及键盘,但是实际上键盘和鼠标是分别可以独立完成键盘鼠标所有工作的,当我们特定于游戏辅助的时候,我们会把它们合起来,所以会考虑下面的因素:?
1. 接口的选择: 设备必然以某种方式和主机通讯,在这里,由于USB设备可以设计为轻易的修改为USB复合设备,提供多个USB设备集成到一个硬件平台上的功能,故大部分辅助方案其实都是USB方案,同样基于这个原因PS/2的接口就会被否决掉;
2. 硬件平台选择: 目前基本上都是Arm + linux这样的搭配,就算对于我这种硬件0基础的人来说,这个搭配我也能轻松的跑起来;
3. 软件方案: 在淘宝上很多店铺自己搞了很多易语言的平台,这个其实把门槛已经降得很低了,当然这个系列还是使用C语言来设计,这样看的人多一点。
在现在这种情况下直接在主机上编程控制鼠标键盘,几乎属于必然被PASS掉的,但是这并不妨碍这方面的方案成为自动化测试的重要组成部分,好吧,回到辅助的话题,目前还在用的就是在虚拟机之外编程模拟USB鼠标键盘控制虚拟机,这个倒是比较不错的方案。
在windows系统中,最终在每个窗口的WndProc回调中,鼠标消息响应ID为WM_LBUTTONDOWN、WM_MOUSEMOVE;键盘消息则是WM_KEYDOWN,可以有很多种办法最终向某个窗口发送这些消息。