我写了一个监控鼠标事件的代码,我想监控鼠标的左右按键,当我按下左键或者右键时输出并且记录下来,
但是我的这段代码好像只能对右键反应,而且点击左键的输出一样,这是哪里出问题了,希望大佬帮我看看,谢谢
对了,我的需求很简单,就是实时监控鼠标左右键,按下键时记录下来保存为npy数据。不用监控鼠标坐标
from pynput import mouse
from pynput.mouse import Button, Controller
import numpy as np
right=[]
left=[]
no=[]
mouse_out=[]
def on_move(x, y):
print('Pointer moved to {0}'.format((x, y)))
def on_click(x, y, button, pressed):
right_data=[]
left_data=[]
no=[]
if Button.right:
right_data = [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
#print('{0} at {1}'.format(
#'Pressed' if pressed else 'Released',(x, y)))
#print("右键",right_data)
elif button == Button.left:
left_data = [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
print('{0} at {1}'.format('Pressed' if pressed else 'Released',(x, y)))
print("左键",left_data)
if not pressed:
no=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]
return right_data,left_data,no
# Stop listener
def on_scroll(x, y, dx, dy):
print('Scrolled {0} at {1}'.format(
'down' if dy < 0 else 'up',(x, y)))
# Collect events until released
with mouse.Listener(on_click=on_click) as listener:
listener.join()
#print(right_data)
#np.save(r'C:\Users\Administrator\Desktop\ckpt_dir\mouse_data',right_data)
我研究了几个小时,拿别人的一个源码改了一下,基本实现实时监控鼠标左右键的点击了,但是还是有问题,第一就是太占内存了,把鼠标坐标检测打开,CPU占用70,内存60.希望有大佬能优化一下,哈哈哈
第二就是监控不知道是有错误,还是我的代码有错误,左键数值会变化,正常的是1,但是有时候会变成0,加了线程锁都没用。而且右键不是每次点击都会检测到,原因也不知道,发现自己啥也不知道。。
import threading
from pynput.mouse import Button, Listener, Controller
from pynput import keyboard
import time
import numpy as np
# 记录操作指令
# 左键
shoot = 0
# 右键
scope = 1
#
status = 1
mouse_out=[]
# 鼠标控制器
controller = Controller()
lock=threading.Lock()
"""
鼠标事件
"""
def mouse_click(x, y, button, pressed):
global shoot
global scope
if pressed:
# 点击右键
if button == Button.right:
scope = 0
# 点击左键
if button == Button.left:
shoot = 1
#
if not pressed and button == Button.left:
shoot = 0
# 监控鼠标位置
def mouse_move(x, y):
print(x, y)
"""
键盘事件
"""
# def keyboard_release(key):
# global status
# if key == keyboard.Key.backspace:
# #
# status = -status
"""
监听事件方法
"""
def mouseListener():
with Listener(on_click=mouse_click) as listener:
listener.join()
# def keyboardListener():
# with keyboard.Listener(
# on_release=keyboard_release) as listener:
# listener.join()
def main():
threading._start_new_thread(mouseListener, ())
#threading._start_new_thread(keyboardListener,
while 1:
# 循环监听各状态并控制鼠标
global shoot
global scope
global status
#shoot=0
scope = -1
#status =1
if shoot == 1:
lock.acquire()
time.sleep(0.2)
controller.move(0, +15)
mouse_out.append([shoot])
np.save(r'C:\Users\Administrator\Desktop\ckpt_dir\mouse_out',mouse_out)
print('左键',shoot)
lock.release()
elif scope == 0:
time.sleep(0.2)
controller.move(0, +25)
mouse_out.append([scope])
np.save(r'C:\Users\Administrator\Desktop\ckpt_dir\mouse_out',mouse_out)
print('右键',scope)
if __name__ == '__main__':
main()
你用了numpy能不卡吗?