2017-08-31 148 views
0

我一直在使用pynput库来监视鼠标的点击。我面对的唯一问题是终端不按Ctrl + C终止。我需要用鼠标监听器来使用键盘监听器。这是我的代码:在Python中使用鼠标和键盘监听器

import os 
import time 
import re 
from pynput import mouse 
from pynput.keyboard import Key, Listener 
f=open('maniac1.txt','a') 

inc=1 
f.write('<mouse_new>\n') 

def on_click(x, y, button, pressed): 
    f=open('maniac1.txt','a') 
    if button == mouse.Button.left: 
     print 'Left' 
     f.write('left\n') 

    if button == mouse.Button.right: 
     print 'right' 
     f.write('right\n') 
    if button == mouse.Button.middle: 
     print 'middle' 
     f.write('middle\n') 

with mouse.Listener(on_click=on_click,on_scroll=on_scroll) as listener: 
    try: 
     listener.join() 
    except MyException as e: 
     print('Done'.format(e.args[0])) 

如何在按Esc或Ctrl + C后终止此代码?我正在使用OSX。

+0

按“选项+ c” –

+0

我已经提到过我使用了选项+ C。它不工作。程序不终止。我想用鼠标监听器添加键盘监听器 –

回答

1

创建一个不带“with”关键字的实例keyboard.Listener,以便您可以根据鼠标侦听器启动和停止侦听器。检查下面的代码,在鼠标右键点击后将停止听f8的按键。

import os 
import time 
import re 
from pynput import mouse 
from pynput.keyboard import Key, Listener 
#f=open('maniac1.txt','a') 

inc=1 
#f.write('<mouse_new>\n') 
from pynput import keyboard 

def on_functionf8(key): 
    if (key==keyboard.Key.f8): 
     print('f8 is pressed') 


key_listener = keyboard.Listener(on_release=on_functionf8) 
key_listener.start() 


def on_click(x, y, button, pressed): 
    f=open('maniac1.txt','a') 
    if button == mouse.Button.left: 
     print ('Left') 
     #f.write('left\n') 

    if button == mouse.Button.right: 
     key_listener.stop() 
     print ('right') 
     #f.write('right\n') 
    if button == mouse.Button.middle: 
     print ('middle') 
     #f.write('middle\n') 

with mouse.Listener(on_click=on_click) as listener: 
    try: 
     listener.join() 
    except MyException as e: 
     print('Done'.format(e.args[0])) 

运行该程序并按f8键,您将在终端上看到'f8被按下'。但右键单击并按f8。当鼠标右键点击停止键盘监听器时,您将看不到任何打印内容。

为Mac:

def on_press(key): 
    try: 
     print('alphanumeric key {0} pressed'.format(
      key.char)) 
    except AttributeError: 
     print('special key {0} pressed'.format(
      key)) 



key_listener = keyboard.Listener(on_release=on_press) 

只有几个键像CMD,ALT默认监听的MAC。

+0

没有。它没有显示F8被按下。我尝试按F8后右键点击too.It只显示鼠标clicks.i.e左/右/中间。 –

+0

默认情况下,Mac保护键盘记录器,不会让你听按键,除了像cmd,alt等几个键。这是完全不同的问题。如果您想检查功能,请打印每个键并尝试按cmd或alt。添加了这个答案。请检查。 –

+0

是的,你是对的。它只听特殊键,如'Shift','cntrl','命令'。但是我希望操作系统也可以听其他字母数字键。我怎样才能做到这一点? –