最近心血来潮回归赛尔号(十年铁皮常不请自来)
做剧情任务的时候有个小游戏,拖动黄色的按钮到达终点,白色的是存档点,途中如果碰到墙壁需要对战野怪,打赢了可以从存档点出发,但是由于刚回归,精灵跟不上时代,野怪打不过导致一旦失误只能从头再来
连续试了十几次之后屡屡碰壁,但又舍不得那个体力上限药剂
感谢赛尔号让我知道我有帕金森的预兆_(:з」∠)_
那么有没有一种办法,让鼠标一次只移动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()
运行后就能输出当前按下的键位了
初步要实现的功能:
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()
一通小心翼翼的操作之后,终于过去了。。
后续预告:PyQt5实现GUI界面 ,同时将键鼠控制功能以及连点器加入进去(咕