Python自动化 | 通过键盘控制鼠标来玩赛尔号

最近心血来潮回归赛尔号(十年铁皮常不请自来)

做剧情任务的时候有个小游戏,拖动黄色的按钮到达终点,白色的是存档点,途中如果碰到墙壁需要对战野怪,打赢了可以从存档点出发,但是由于刚回归,精灵跟不上时代,野怪打不过导致一旦失误只能从头再来

Python自动化 | 通过键盘控制鼠标来玩赛尔号_第1张图片

连续试了十几次之后屡屡碰壁,但又舍不得那个体力上限药剂

感谢赛尔号让我知道我有帕金森的预兆_(:з」∠)_

那么有没有一种办法,让鼠标一次只移动1-2个像素,来一点一点地移动,避免撞墙失误呢?

随后想起来可以用Python写一个键盘控制鼠标移动的程序,来进行“微操”

而PyAutoGUI这个库可以比较方便地实现这个功能                     
        推荐阅读→PyAutoGUI——自动化控制鼠标和键盘操作

 

一、环境配置

IDE:Pycharm

第三方库:pynput、PyAutoGUI

 

二、按键监听

既然要用键盘操控鼠标,那么就要知道键盘按下了什么键,可以使用pynput这个库里的listener模块
(其实pynput也可以实现对键盘和鼠标的控制,但PyAutoGUI可以根据鼠标的相对位置来移动,比较方便一些

那么一个简单的键盘监听功能就写好了

from pynput.keyboard import Listener

def press(key):
    print(key)      #输出键位

def start_listen():
    with Listener(on_press=press) as listener:
        listener.join()
    #监听键盘按键

if __name__ == '__main__':
    start_listen()

运行后就能输出当前按下的键位了

Python自动化 | 通过键盘控制鼠标来玩赛尔号_第2张图片

 三、鼠标控制

初步要实现的功能:

1.通过键盘的上下左右键来移动鼠标位置

   在pyautogui中通过以下方式来实现移动鼠标位置

pyautogui.moveRel(x,y,duration = t)   #相对于当前位置移动光标,
                                      #这里的x,y不再是目标位置的坐标,而是偏移量,
                                      #如,pyautogui.moveRel(100,0,duration=0.25)
                                      #表示光标相对于当前所在位置向右移动100个像素
                                      #duration指定鼠标光标移动到目标位置
                                      #所需要的秒数,t可以为整数或浮点数,省略duration参数表示
                                      #立即将光标移动到指定位置(在PyAutoGUI函数中,所有的duration
                                      #关键字参数都是可选的)

2.点击Ctrl键实现拖拽功能(左键保持点击

pyautogui.mouseDown()   #按下鼠标按键(左键)

3.点击Alt键释放左键(左键点击后

pyautogui.mouseUp()     #释放鼠标按键(左键)

4.通过Esc键终止程序

最终代码:

import pyautogui
from pynput.keyboard import Listener

#保护措施,避免失控
pyautogui.FAILSAFE = True
#为所有的PyAutoGUI函数增加延迟。默认延迟时间是0.1秒。
pyautogui.PAUSE = 0

def press(key):
    print(str(key))
    K = str(key)
    if(K == 'Key.esc'):
        exit()
    elif(K == 'Key.ctrl_l'):
        pyautogui.mouseDown()
    elif (K == 'Key.alt_l'):
        pyautogui.mouseUp()
    elif (K == 'Key.up'):
        pyautogui.moveRel(0,-2, duration=0.0)
    elif (K == 'Key.down'):
        pyautogui.moveRel(0,2, duration=0.0)
    elif (K == 'Key.left'):
        pyautogui.moveRel(-2,0, duration=0.0)
    elif (K == 'Key.right'):
        pyautogui.moveRel(2,0, duration=0.0)

def startListener():
    with Listener(on_press = press) as listener:
        listener.join()

if __name__ == '__main__':
    startListener()

 

一通小心翼翼的操作之后,终于过去了。。

 Python自动化 | 通过键盘控制鼠标来玩赛尔号_第3张图片

后续预告:PyQt5实现GUI界面 ,同时将键鼠控制功能以及连点器加入进去(咕

你可能感兴趣的:(Python,Python自动化)