python中控制、监听键盘鼠标常用pynput模块,有时也会使用pywin32模块。
本文主要讲如何使用pynput模块控制、监听键盘。由于本人能力有限,不足之处还望指正。
①安装pynput模块。打开cmd,输入pip install pynput即可。
②IDE的选择。建议使用pycharm或spyder,因为会自动补全代码,很方便。
③亢奋的心情。学新知识前要尽量保持亢奋,如果你现在不是很亢奋,可以先去看几个小电影。
注:安装过程中如果速度很慢可是使用国内镜像
打开cmd,输入pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple/
步骤:
①实例化键盘对象
②模拟按压、松开按键
③模拟按键分为两类:
1、space、ctrl---------使用keyboard.press(Key.space)
2、普通字母,a、b、A等----------使用keyboard.press(‘a’)
## ================================================
## 控制键盘
## ================================================
from pynput.keyboard import Key, Controller
keyboard = Controller() #实例化键盘对象
# 按键盘和释放键盘
keyboard.press(Key.space) # 按下空格键
keyboard.release(Key.space) # 松开空格键
# 按小写的a
keyboard.press('a')
keyboard.release('a')
# 按住shift再按a
with keyboard.pressed(Key.shift):
keyboard.press('a')
keyboard.release('a')
# 直接输入字符串
keyboard.type('Hello World')
注:当你不知道该按压哪个键盘时可以先运行下面监听键盘的函数,控制台会自动显示按键名称。
如下图:
易知我先按了空格键,后按了w键。只需要将输出的内容放置到keyboard.press()括号内即可
当键盘的有按键按下、松下会调用应绑定的函数
## ================================================
## 监听键盘
## ================================================
from pynput.keyboard import Key, Listener
keyboard = Controller() #实例化键盘对象
def on_press(key): # 按键被按压调用这个函数
# 输出按压的按键名字
print('{0} pressed'.format(key))
def on_release(key): # 按键被松开调用这个函数
# 输出松开的按键名字
print('{0} release'.format(key))
if key == Key.esc: # 如果按了Esc键就停止监听
return False # Stop listener
# 连接事件以及释放
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
## ================================================
## 控制鼠标
## ================================================
from pynput.mouse import Button, Controller
mouse = Controller() # 实例化对象
# 读鼠标坐标
print('The current pointer position is {0}'.format(mouse.position))
# 移动鼠标到指定位置
mouse.position = (10, 20)
print('Now we have moved it to {0}'.format(mouse.position))
# 移动鼠标到相对位置,以position为原点
mouse.move(5, -5)
# 按住和放开鼠标
mouse.press(Button.left)
mouse.release(Button.left)
# 点击鼠标左键2下
mouse.click(Button.left, 1)
# 滚动鼠标
mouse.scroll(0, 500) # 0表示模式,500表示向上滑500,写成-500则表示向下滑500
注:可以使用监听鼠标的代码获取鼠标的实时位置
## ================================================
## 监听鼠标
## ================================================
from pynput.mouse import Listener
def on_move(x, y): # 监听鼠标移动
print('Pointer moved to {0}'.format((x, y)))
def on_click(x, y, button, pressed): # 监听鼠标点击
print('{0} at {1}'.format('Pressed' if pressed else 'Released', (x, y)))
if not pressed: # 如果没有按压就结束程序(即,单击一下鼠标会结束程序)
# Stop listener
return False
def on_scroll(x, y, dx, dy): # 监听鼠标滚轮
print('Scrolled {0}'.format((x, y)))
# 连接事件以及释放
with Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
listener.join()
pywin32是比pynput更加基层的库,也可以满足以上需求。在此不做详细介绍,有兴趣同学可以百度一下。
pywin32库按压按键时使用虚拟键盘的方式,例如代码中的0x53、0x11等,
具体按键的对应关系如下: 点击这里 下载
import win32api
import win32gui
# 按下ctrl+s
win32api.keybd_event(0x11, 0, 0, 0) # 按下ctrl
win32api.keybd_event(0x53, 0, 0, 0) # 按下s
win32api.keybd_event(0x53, 0, win32con.KEYEVENTF_KEYUP, 0) # 松开s
win32api.keybd_event(0x11, 0, win32con.KEYEVENTF_KEYUP, 0) # 松开ctrl
# 按下回车
win32api.keybd_event(0x0D, 0, 0, 0) # 按下回车
win32api.keybd_event(0x0D, 0, win32con.KEYEVENTF_KEYUP, 0) # 松开回车
#发送文字
hWndEdit="我爱阿龙"
win32gui.SendMessage(hWndEdit,win32con.WM_CHAR,x, 0)
注:先复制想输出的话再启动程序
print('Made by 帅帅龙')
from pynput.keyboard import Key, Controller
import time
keyboard = Controller()
a=input("请输入你需要循环输出的内容:")
b=eval(input('请输入你想循环输出的次数:'))
c=eval(input('逐字输出请按1,整句输出请按2:'))
print("数据已接收!请将光标移动到会话框")
time.sleep( 2 )
for i in range(3):
print('距离程序运行还有%d秒!'%(3-i))
time.sleep( 1 )
for i in range(b):#设置循环次数
if c==2:
keyboard.type(a)
keyboard.press(Key.enter)
keyboard.release(Key.enter)
time.sleep(0.1)
elif c==1:
for t in a:
keyboard.type(t)
keyboard.press(Key.enter)
keyboard.release(Key.enter)
time.sleep(0.1)
else:
print('别乱输啊...')
print('消息发送完成!请关闭窗口')
print('Made by 帅帅龙')
import win32api
import win32con
import time
b=eval(input('请输入你想循环输出的次数:'))
a=eval(input('请输入每条消息停留的间隙:'))
print("数据已接收!请将光标移动到会话框")
for i in range(3):
print('距离程序运行还有%d秒!'%(3-i))
time.sleep( 1 )
for i in range(b):#设置循环次数
win32api.keybd_event(0x11,0,0,0)
win32api.keybd_event(0x56,0,0,0)
win32api.keybd_event(0x56,0,win32con.KEYEVENTF_KEYUP,0)
win32api.keybd_event(0x11,0,win32con.KEYEVENTF_KEYUP,0)
win32api.keybd_event(0x0D,0,0,0)
win32api.keybd_event(0x0D,0,win32con.KEYEVENTF_KEYUP,0)
time.sleep(a)
print('消息发送完成!请关闭窗口')
注:在这里只给大家提供一个demo,有什么问题可以私信我。
#coded by 帅帅龙
import time
def save_html(wait_time=2,save_wait_time=3,grade=1): # 保存网页
from pynput.keyboard import Key, Controller
keyboard = Controller()
time.sleep(wait_time) #等待响应时间
keyboard.press(Key.ctrl_l) # 按下ctrl
keyboard.press("s") # 按下s
keyboard.release("s") # 松开s
keyboard.release(Key.ctrl_l) # 松开ctrl
time.sleep(save_wait_time) # 等待弹出保存等待窗口的时间
keyboard.press(Key.shift)
keyboard.release(Key.shift)
num=1
if grade==1:
path=r'C:\Users\86166\Desktop\存放网址\一级\序号:'+str(num)
for i in path:
keyboard.type(i)
else:
path = r'C:\Users\86166\Desktop\存放网址\二级\序号:' + str(num)
for i in path:
keyboard.type(i)
num+=1
keyboard.press(Key.enter)
keyboard.release(Key.enter)
def type_url(url='www.baidu.com'): # 输入url
from pynput.keyboard import Key, Controller
keyboard = Controller()
keyboard.press(Key.f6)
keyboard.release(Key.f6)
time.sleep(0.5)
keyboard.press(Key.shift)
keyboard.release(Key.shift)
time.sleep(1)
for i in url:
keyboard.type(i) # 输入网站
keyboard.press(Key.enter) # 跳转
keyboard.release(Key.enter)
def scroll(end=-500,style=0): # 滑动鼠标
from pynput.mouse import Controller
mouse=Controller()
mouse.scroll(style, end)
def get_files_path(path='一级'): # 获取文件地址
import os
files=os.listdir(path)
files_path=[path + i for i in files]
return files_path
if __name__ == '__main__':
time.sleep(3)
type_url()
save_html()
思路:
①下载everypiano或者easypiano模拟钢琴软件
②下载相应歌曲的epo文件,并看歌曲是怎么弹奏的
③设置好时间间隔和按键顺序,启动程序
注:建议使用pywin32模块
思路:
①训练场使用枪支发射子弹,截图并计时
②分析某时刻的弹道轨迹,并控制鼠标移动
③设置热键,当按压这个按键时调用②中的代码,松开按键则停止射击
③启动程序后启动游戏
注:同理可以制作cf跳跳乐脚本
略…