罗技驱动安装包和dll文件链接:
Tjner0/MouseControl: 调用罗技键鼠驱动 (github.com)
首先你得有一个罗技鼠标
然后安装我提供的版本的罗技驱动,而且,安装后在设置取消自动更新,不然更新后用不了了。
然后开始写调用的脚本代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| import ctypes import os # import pynput # import winsound # import random # import pyautogui import time
try: # 获取当前绝对路径 root = os.path.abspath(os.path.dirname(__file__)) driver = ctypes.CDLL(f'{root}/logitech.driver.dll') ok = driver.device_open() == 1 # 该驱动每个进程可打开一个实例 if not ok: print('Error, GHUB or LGS driver not found') except FileNotFoundError: print(f'Error, DLL file not found') class Logitech: class mouse: """ code: 1:左键, 2:中键, 3:右键 """ WAIT_TIME = 0.5 # 等待时间 RANDOM_NUM = 0.1 # 最大时间随机数 @staticmethod def press(code): if not ok: return driver.mouse_down(code) @staticmethod def release(code): if not ok: return driver.mouse_up(code) @staticmethod def click(code): if not ok: return driver.mouse_down(code) driver.mouse_up(code) @staticmethod def scroll(a): """ a:没搞明白 """ if not ok: return driver.scroll(a) @staticmethod def move(x, y): """ 相对移动, 绝对移动需配合 pywin32 的 win32gui 中的 GetCursorPos 计算位置 pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple x: 水平移动的方向和距离, 正数向右, 负数向左 y: 垂直移动的方向和距离 """ if not ok: return if x == 0 and y == 0: return driver.moveR(x, y, True)
class RunMovingTo: def __init__(self,move_x_distance,move_y_distance): self.move_x_distance = move_x_distance self.move_y_distance = move_y_distance self.log_mouse = Logitech.mouse def quick_move(self): self.log_mouse.move(self.move_x_distance,self.move_y_distance)
def main(): time.sleep(3) #run_lgt = RunMovingTo(-50961,2) run_lgt = RunMovingTo(1920,1080) # for i in range(110): # time.sleep(1) # run_lgt.quick_move() run_lgt.quick_move() print(type(run_lgt)) # time.sleep(1) # run_lgt.quick_move() if __name__=="__main__": main()
|
这里说一下鼠标原理。
在工程控制中,对于一个控制系统我们没有办法直接给出移动到哪就直接移动到目标点的方法,鼠标这个控制系统也是,鼠标传感器也就是鼠标底下发光的东西,通过录入在直角坐标系上移动的信息,然后传递给驱动,驱动接收横向和纵向的移动信息驱使鼠标光标移动。因此,这里main函数中我们传入了1920,1080(这是我显示器分辨率)后,运行这份脚本,在sleep3秒期间将鼠标光标推到屏幕左上角也就是坐标(0,0)位置,等待罗技驱动调用后,鼠标光标落点只可能在左上角到右下角这条对角线上。我们没法保证它落在(1920,1080)也就是右下角。因此,这意味着,我们的quick_move传入的信息影响着方向和步长即移动多远。
如何实现指定鼠标光标到哪个位置?
思路:
1.记录当前鼠标光标位置
2.计算目标位置-当前位置得到方向
3.调用quickmove往这个方向移动。
4.循环2和3,直到与目标点之间距离小于1像素值。
这里要注意,这个方向肯定是确定的,但是步长需要设置小一点,不然每次quickmove后,鼠标都超过目标点的话,那么这种循环趋近的方法永远也无法达到。