49 votes

Comment obtenir la position du curseur de texte dans Windows ?

Est-il possible d'obtenir la position globale du curseur dans Windows en utilisant les bibliothèques Python standard ?

2 votes

Pour une question qui demande que cela soit fait en utilisant les bibliothèques Python standard, il n'y a pas vraiment de solution. La réponse choisie nécessite l'installation de modules supplémentaires. Je dis cela parce qu'en googlant la question, on arrive directement ici. (Vous POUVEZ utiliser tkinter, mais cela nécessite que vous ayez une instance( ?) de tkinter qui tourne en même temps AFAIK).

2 votes

C'est déprimant de voir que 99% de la population de programmation semble penser que "cursor position" est la même chose que position de la souris/pointeur alors que rien ne peut être plus éloigné la vérité . Dans ce PO, l'utilisateur demande la position "texte", pas la position graphique. Coordonnées (x,y) du pointeur.

6voto

Punnerud Points 362

Pour Mac, en utilisant la bibliothèque native :

import Quartz as q
q.NSEvent.mouseLocation()

#x and y individually
q.NSEvent.mouseLocation().x
q.NSEvent.mouseLocation().y

Si le Quartz -wrapper n'est pas installé :

python3 -m pip install -U pyobjc-framework-Quartz

(La question précise Windows, mais beaucoup d'utilisateurs de Mac viennent ici à cause du titre)

5voto

lazy juice Points 39

C'est possible, et ce n'est même pas si compliqué ! Il suffit d'utiliser :

from ctypes import windll, wintypes, byref

def get_cursor_pos():
    cursor = wintypes.POINT()
    windll.user32.GetCursorPos(byref(cursor))
    return (cursor.x, cursor.y)

La réponse utilisant pyautogui m'a fait me demander comment ce module faisait, alors j'ai regardé et voilà comment.

0 votes

Cela ne donne pas à la position du curseur comme vous le pensez. Il donne écran Coordonnées (x,y) de la pointeur de souris . Vérifiez avec : while(1): print('{}\t\t\r'.format(get_cursor_pos()), end='')

4voto

Aryan Gupta Points 21

Cela pourrait être un code possible pour votre problème :

# Note you  need to install PyAutoGUI for it to work

import pyautogui
w = pyautogui.position()
x_mouse = w.x
y_mouse = w.y
print(x_mouse, y_mouse)

0 votes

Utilisation de pyautogui.position() a déjà été répondu aquí y aquí

3voto

moose Points 4945

Conditions préalables

Installer Tkinter . J'ai inclus le win32api comme solution pour Windows seulement.

script

#!/usr/bin/env python

"""Get the current mouse position."""

import logging
import sys

logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s',
                    level=logging.DEBUG,
                    stream=sys.stdout)

def get_mouse_position():
    """
    Get the current position of the mouse.

    Returns
    -------
    dict :
        With keys 'x' and 'y'
    """
    mouse_position = None
    import sys
    if sys.platform in ['linux', 'linux2']:
        pass
    elif sys.platform == 'Windows':
        try:
            import win32api
        except ImportError:
            logging.info("win32api not installed")
            win32api = None
        if win32api is not None:
            x, y = win32api.GetCursorPos()
            mouse_position = {'x': x, 'y': y}
    elif sys.platform == 'Mac':
        pass
    else:
        try:
            import Tkinter  # Tkinter could be supported by all systems
        except ImportError:
            logging.info("Tkinter not installed")
            Tkinter = None
        if Tkinter is not None:
            p = Tkinter.Tk()
            x, y = p.winfo_pointerxy()
            mouse_position = {'x': x, 'y': y}
        print("sys.platform={platform} is unknown. Please report."
              .format(platform=sys.platform))
        print(sys.version)
    return mouse_position

print(get_mouse_position())

2voto

Jozsef Turi Points 301
sudo add-apt-repository ppa:deadsnakes
sudo apt-get update
sudo apt-get install python3.5 python3.5-tk
# or 2.7, 3.6 etc
# sudo apt-get install python2.7 python2.7-tk

# mouse_position.py
import Tkinter
p=Tkinter.Tk()
print(p.winfo_pointerxy()

Ou avec une ligne de commande :

python -c "import Tkinter; p=Tkinter.Tk(); print(p.winfo_pointerxy())"
(1377, 379)

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