# 导入pynput中的keyboard,mouse
from pynput import keyboard,mouse
# 导入线程库,因为监听键盘和鼠标都是阻塞的
import threading
# 键盘按下执行的函数 使用try和except的原因是有特殊按键(功能键)
def keyboard_on_press(key):
try:
print('{0} press'.format(key.char))
except AttributeError:
if key == keyboard.Key.esc:
return False
print(key)
# 键盘弹起执行的函数 使用try和except的原因是由特殊按键(功能键)
def keyboard_on_release(key):
try:
print('{0} release'.format(key.char))
except AttributeError:
print(key)
# 鼠标移动执行的函数
def mouse_on_move(x, y):
print('Pointer moved to {0}'.format((x, y)))
# 鼠标点击执行的函数
def mouse_on_click(x, y, button, pressed):
print('{0} at {1}'.format('Pressed' if pressed else 'Released', (x, y)))
# 鼠标滚轮执行的函数
def mouse_on_scroll(x, y, dx, dy):
print('Scrolled {0}'.format((dx, dy)))
# 开启键盘监听的线程函数
def start_key_listen():
with mouse.Listener(on_move=mouse_on_move, on_click=mouse_on_click, on_scroll=mouse_on_scroll) as MouseListener:
MouseListener.join()
# 开启鼠标监听的线程函数
def start_mouse_listen():
with keyboard.Listener(on_press=keyboard_on_press, on_release=keyboard_on_release) as KeyboardListener:
KeyboardListener.join()
def main():
# 创建、启动键盘监听线程
t1=threading.Thread(target=start_key_listen)
t1.start()
# 创建、启动鼠标监听线程
t2=threading.Thread(target=start_mouse_listen)
t2.start()
# 等待线程结束
t1.join()
t2.join()
if __name__ == "__main__":
main()