罗技游戏软件 LUA脚本编程 从入门到放弃 篇四:鼠标定位与移动 |
您所在的位置:网站首页 › 鼠标多窗口同步怎么关闭 › 罗技游戏软件 LUA脚本编程 从入门到放弃 篇四:鼠标定位与移动 |
罗技游戏软件 LUA脚本编程 从入门到放弃 篇四:鼠标定位与移动
2017-05-20 20:00:00
36点赞
112收藏
42评论
距上一篇已经快一个月啦,原因有三~ 一个是忙,宝宝更大了,已经习得连续滚翻天赋,没办法放床上或车上忽悠一会儿抽点时间出来了。 一个是懒,这个没药医。 还有一个,就是LGS的鼠标坐标相关函数的参数系统,乱得一逼。特别是在双屏的情况下,基本每个函数的参数用法都不一样 我花了点时间整理了一下几个函数的参数规律,适用于多显示器的朋友参考。 如果你跟我一样使用多显示器,使用鼠标移动、定位的相关函数之前,请务必看完,否则会一头雾水。 如果你只有单显示器……呃,差不多可以直接看下一期了。 首先我们来看仅有的、获取鼠标坐标的方式,GetMousePosition。 之所以要用这个函数,因为LGS里并非以屏幕像素坐标来作为参数,而是以0至65535为区间两头。 也就是说,假设你的鼠标在屏幕右下角,以传统的像素坐标系,它应该是x=1920,y=1080。但是在LSG的坐标系里,它就是x=65535,y=65535。 并且,LGS的直接移动函数都是用的此等计算方法,所以如果你的取点和定位都用LGS来完成的话,或许还是离不开这个函数的。 或者,咱们可以用其他软件取得像素坐标,然后通过数学换算的方式算得LGS的这个坐标系,也是可以的。 经过实战,GetMousePosition这个函数以主显示器左上角为原点(0,0),所以如果你的副显示器在主显左边,则X轴就会变成负数。如果在右边,则X轴会大于65535,以此类推。 这个函数非常坑爹,它只能在主显示器范围内移动。 我的主显示器是靠右的宽屏,无法移动到靠左的带鱼。 因为,传负数进去函数会直接报错,而官方文档也写了,如果接入了多个显示器请用其他函数代替。 所以,如果你只有单显示器,用GetMousePosition和MoveMouseTo函数即可。 但是如果你接了多显,那就**了……请往下看。 根据官方文档,这是唯一一个能在多显示器状态下,移动鼠标到任意位置的函数。 但是经过实测,这个函数的参数规则,是以全桌面的最左上角为(0,0),说白了,和GetMousePosition函数是不一样的。 也就是说,你用GetMousePosition函数辛辛苦苦抓取的坐标,在这个函数里是不能用的,必须要经过计算变换………… 能干出这种事情来,LGS的工程师也算是人才了。估计这俩函数不是同一个人写的,又没有一个统筹的产品经理,于是这几个奇葩的函数就这么诞生了。 MoveMouseRelative那么,LGS非常“慈悲”的提供了另一个函数,以当前鼠标坐标为原点,进行“相对移动”的函数。 但是奇葩的是,这个函数的坐标参数,使用的是像素,也就是屏幕像素,而非前面几个函数的65535系统。 那么毫无疑问了,这三个函数肯定是三个不同的程序员写的,而且他们没有一个产品经理…… 而更更更更奇葩的是,这个函数的参数最多只能接受-127到128,也即一个字节的0xFF。 如果你传入了大于128的数字,则会溢出,129相当于-127,256相当于0,虽然不会报错,但是绝对得不到想要的结果。 因为LUA都是要宿主导出函数的,如果宿主参数定义的时候,就只有一个字节,那也就会变成这样了。 -------------------------------------------------------------------------------------------------- 说了那么多,如果非要总结一下的话: 假如你是独显,或者多显但脚本只用在主显示器上,则问题不大,使用GetMousePosition函数获取坐标之后,使用MoveMouseTo移动即可。 如果你的脚本有用在多显器的非主显示器上,则必须先使用GetMousePosition获得一套坐标,经过算术变换,算得另一套坐标,再使用到MoveMouseToVirtual函数里。 本期就先用MoveMouseRelative来做一下守望屁股的一键转身,下期再整理一份多屏情况下通用的变换函数和应用脚本。 由于MoveMouseRelative函数一次最多只能移动128个像素,为了方便调试,结合实测之后,大概是每次10个像素,182次移动可以转大概180度……这个参数根据每个人的分辨率、游戏、鼠标状况等都有可能不一样,只能自行实测了。 代码和罗技的参考文档都放到度盘里了,车牌号1bp3oOP5。 下一期:坐标变换与一键换装 ![]() |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |