2017-08-31 4 views
0

J'ai utilisé la bibliothèque pynput pour surveiller les clics de la souris. Le seul problème auquel je suis confronté est que le terminal ne se termine pas en appuyant sur Ctrl + C. J'ai besoin d'utiliser l'écouteur de clavier avec l'écouteur de souris. Voici mon code:Utilisation de la souris et des écouteurs de clavier ensemble en 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])) 

Comment puis-je mettre fin à ce code après avoir appuyé sur Esc ou Ctrl + C J'utilise OSX?.

+0

appuyez sur "option + c" –

+0

J'ai déjà mentionné que j'ai utilisé l'option + C. Il ne fonctionne pas.Le programme ne se termine pas. Je veux ajouter l'écouteur de clavier avec l'écouteur de la souris –

Répondre

1

Créez une instance keyboard.Listener sans le mot clé "with" afin de pouvoir démarrer et arrêter l'écouteur en fonction de votre écouteur de souris. Vérifiez le code ci-dessous qui cessera d'écouter la touche de f8 après un clic droit à la souris.

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])) 

exécutez le programme et appuyez sur f8 et vous verrez 'f8 est enfoncé' sur le terminal. Mais faites un clic droit et appuyez sur f8. Vous ne verrez rien imprimé alors que nous avons arrêté l'écoute du clavier en cliquant avec le bouton droit de la souris.

pour 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) 

seulement quelques touches comme cmd, alt sont écoutées sur Mac par défaut.

+0

Nope ..Il ne montre pas F8 est pressé.J'ai essayé d'appuyer sur F8 après le clic droit aussi.Il affiche seulement les clicks.i.e souris gauche/droite/milieu. –

+0

Par défaut mac protège des keyloggers, ne vous laisse pas écouter les touches sauf quelques touches comme cmd, alt etc .. C'est un problème tout à fait différent. Si vous voulez vérifier la fonctionnalité, imprimez chaque touche et essayez d'appuyer sur cmd ou alt. Ajouté ceci à la réponse. Vérifiez s'il vous plaît. –

+0

Oui, vous avez raison. Il n'écoute que les touches spéciales comme 'Shift', 'cntrl', 'command'. Mais je veux que le système d'exploitation écoute également d'autres touches alphanumériques. Comment puis-je y arriver? –