How to get the text cursor position in Windows?

Question:

Is it possible to get the overall cursor position in Windows using the standard Python libraries?

Asked By: rectangletangle

||

Answers:

win32gui.GetCursorPos(point)

This retrieves the cursor’s position, in screen coordinates – point = (x,y)

flags, hcursor, (x,y) = win32gui.GetCursorInfo()

Retrieves information about the global cursor.

Links:

I am assuming that you would be using python win32 API bindings or pywin32.

Answered By: pyfunc

You will not find such function in standard Python libraries, while this function is Windows specific. However if you use ActiveState Python, or just install win32api module to standard Python Windows installation you can use:

x, y = win32api.GetCursorPos()
Answered By: MichaƂ Niklas

I found a way to do it that doesn’t depend on non-standard libraries!

Found this in Tkinter

self.winfo_pointerxy()
Answered By: rectangletangle

Using the standard ctypes library, this should yield the current on screen mouse coordinates without any third party modules:

from ctypes import windll, Structure, c_long, byref


class POINT(Structure):
    _fields_ = [("x", c_long), ("y", c_long)]



def queryMousePosition():
    pt = POINT()
    windll.user32.GetCursorPos(byref(pt))
    return { "x": pt.x, "y": pt.y}


pos = queryMousePosition()
print(pos)

I should mention that this code was taken from an example found here
So credit goes to Nullege.com for this solution.

Answered By: Micrified

Prerequisites

Install Tkinter. I’ve included the win32api for as a Windows-only solution.

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())
Answered By: Martin Thoma

Use pygame

import pygame

mouse_pos = pygame.mouse.get_pos()

This returns the x and y position of the mouse.

See this website: https://www.pygame.org/docs/ref/mouse.html#pygame.mouse.set_pos

Answered By: Michael Wang
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()

Or with one-liner from the command line:

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

Using pyautogui

To install

pip install pyautogui

and to find the location of the mouse pointer

import pyautogui
print(pyautogui.position())

This will give the pixel location to which mouse pointer is at.

Answered By: Abhinav

For Mac using native library:

import Quartz as q
q.NSEvent.mouseLocation()

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

If the Quartz-wrapper is not installed:

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

(The question specify Windows, but a lot of Mac users come here because of the title)

Answered By: Punnerud

If you’re doing automation and want to get coordinates of where to click, simplest and shortest approach would be:

import pyautogui

while True:
    print(pyautogui.position())

This will track your mouse position and would keep on printing coordinates.

Answered By: Mujeeb Ishaque

This could be a possible code for your problem :

# 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)
Answered By: Aryan Gupta

It’s possible, and not even that messy! Just use:

from ctypes import windll, wintypes, byref

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

The answer using pyautogui made me wonder how that module was doing it, so I looked and this is how.

Answered By: lazy juice

I know this is an old thread, but have been having hard time figuring out how to do this with JUST the python standard libraries.

I think the code below will work to get the cursor position in a windows terminal:

import sys
import msvcrt

print('ABCDEF',end='')
sys.stdout.write("x1b[6n")
sys.stdout.flush()
buffer = bytes()
while msvcrt.kbhit():
    buffer += msvcrt.getch()
hex_loc = buffer.decode()
hex_loc = hex_loc.replace('x1b[','').replace('R','')
token = hex_loc.split(';')
print(f'  Row: {token[0]}  Col: {token[1]}')
Answered By: Al D
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.