276 votes

Contrôler la souris avec Python

Comment contrôler le curseur de la souris en Python, c'est-à-dire le déplacer à une certaine position et cliquer, sous Windows ?

2 votes

Avez-vous besoin de faire le mouvement de la souris dans le code sans intervention de l'utilisateur ?

0 votes

Des informations supplémentaires seraient vraiment utile...

0 votes

Je travaille sous Windows et je n'utilise pas de boîte à outils. Je suis vraiment novice en Python et je n'ai jamais travaillé avec une interface graphique auparavant. Par où dois-je commencer ? Quel manuel dois-je lire ?

376voto

Jeffrey Kemp Points 26050

Testé sur WinXP, Python 2.6 après installation pywin32 (pywin32-214.win32-py2.6.exe dans mon cas) :

import win32api, win32con
def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
click(10,10)

19 votes

win32api.SetCursorPos((x,y)) Il est préférable de le remplacer par win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0)) dans mon expérience pour une meilleure intégration avec d'autres applications telles que les jeux.

2 votes

@ObsessiveSSO enlève simplement l'indicateur MOUSEEVENTF_ABSOLUTE. pour les détails : msdn.microsoft.com/fr/us/library/Windows/desktop/

1 votes

Puis-je utiliser cette bibliothèque pour contrôler la vitesse/accélération de la souris ?

91voto

Anurag Uniyal Points 31931

Vous pouvez utiliser win32api ou ctypes module pour utiliser les apis win32 pour contrôler la souris ou n'importe quelle interface graphique.

Voici un exemple amusant pour contrôler la souris en utilisant win32api :

import win32api
import time
import math

for i in range(500):
    x = int(500+math.sin(math.pi*i/100)*500)
    y = int(500+math.cos(i)*100)
    win32api.SetCursorPos((x,y))
    time.sleep(.01)

Un clic en utilisant ctypes :

import ctypes

# see http://msdn.microsoft.com/en-us/library/ms646260(VS.85).aspx for details
ctypes.windll.user32.SetCursorPos(100, 20)
ctypes.windll.user32.mouse_event(2, 0, 0, 0,0) # left down
ctypes.windll.user32.mouse_event(4, 0, 0, 0,0) # left up

14 votes

Votre code ctypes a fonctionné pour moi sans aucune bibliothèque supplémentaire ! (python 2.6 sous Windows 7)

1 votes

Sans utiliser de bibliothèque externe ! Merci à vous

4 votes

Merci ! Je ne supporte pas qu'il y ait 3 bibliothèques tierces avec lesquelles on peut faire ça, mais ces 3 bibliothèques sont exaspérantes à installer ou à dépanner. Cette solution ctypes est la première solution native de python et elle fonctionne mieux que toutes les autres que j'ai rencontrées.

28voto

Gwenn Points 186

Une autre option consiste à utiliser la plate-forme croisée Paquet AutoPy . Ce paquet a deux options différentes pour le déplacement de la souris :

Cet extrait de code déplacera instantanément le curseur à la position (200,200) :

import autopy
autopy.mouse.move(200,200)

Si vous souhaitez plutôt que le curseur se déplace visiblement à l'écran jusqu'à un emplacement donné, vous pouvez utiliser la commande smooth_move :

import autopy
autopy.mouse.smooth_move(200,200)

24voto

Simon Points 11945

Je ne connais pas Python, mais une recherche sur Google pourrait m'aider.

"Python contrôlant le mouvement de la souris" a révélé ceci

http://danielbaggio.blogspot.com/2009/03/python-mouse-move-in-5-lines-of-code.html

from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()

21 votes

En cherchant sur Google "Python contrôlant le mouvement de la souris", on trouve cette page, quelle métaphore.

2 votes

Pour être complet, puisque la question demandait aussi de simuler des clics de souris, j'ajouterai : Xlib.ext.xtest.fake_input(d, X.ButtonPress, 1); d.sync(); time.sleep(0.001); Xlib.ext.xtest.fake_input(d, X.ButtonRelease, 1); d.sync(); l'appel sleep() entre le press et le release peut être ou non nécessaire selon l'application cible.

4 votes

@Copas - Les résultats apparaissant dans votre Google ne veulent rien dire. Vous êtes dans une bulle. Cela apparaît dans une recherche DuckDuckGo pour le même terme - c'est quelque chose de réel. C'est quelque chose que tout le monde peut reproduire et voir par lui-même. C'est du méta.

20voto

Fabio Varesano Points 178

Découvrez le logiciel multiplateforme PyMouse : https://github.com/pepijndevos/PyMouse/

8 votes

PyMouse a été remplacé par PyUserInput Ce logiciel répond exactement à la demande, il est simple à utiliser et multiplateforme. Gros +1

0 votes

@user336851, est-ce que vous savez comment tap space et tap screen shot key en utilisant PyUswerInput ?

0 votes

@user336851, A ce moment là PyUserInput est cassé. Je ne peux pas dire si cela fonctionne bien ou non car je n'arrive même pas à l'installer à cause des dépendances cassées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X