Controlling mouse with Python
How does one control the mouse cursor in Python, i.e. move it to certain position and click, under Windows?
Solution 1:
Tested on WinXP, Python 2.6 (3.x also tested) after installing pywin32 (pywin32-214.win32-py2.6.exe in my case):
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)
Solution 2:
Try with the PyAutoGUI module. It's multiplatform.
pip install pyautogui
And so:
import pyautogui
pyautogui.click(100, 100)
It also has other features:
import pyautogui
pyautogui.moveTo(100, 150)
pyautogui.moveRel(0, 10) # move mouse 10 pixels down
pyautogui.dragTo(100, 150)
pyautogui.dragRel(0, 10) # drag mouse 10 pixels down
This is much easier than going through all the win32con stuff.
Solution 3:
You can use win32api
or ctypes
module to use win32 apis for controlling mouse or any gui
Here is a fun example to control mouse using 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)
A click using 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
Solution 4:
As of 2021, you can use mouse:
import mouse
mouse.move("500", "500")
mouse.left_click()
Features
- Global event hook on all mice devices (captures events regardless of focus).
- Listen and sends mouse events.
- Works with Windows and Linux (requires sudo).
- Pure Python, no C modules to be compiled.
- Zero dependencies. Trivial to install and deploy, just copy the files.
- Python 2 and 3
- Includes high level API (e.g. record and play).
- Events automatically captured in separate thread, doesn't block main program.
- Tested and documented.
Installation
- Windows:
pip install mouse
- Linux:
sudo pip install mouse
Solution 5:
Another option is to use the cross-platform AutoPy package. This package has two different options for moving the mouse:
This code snippet will instantly move the cursor to position (200,200):
import autopy
autopy.mouse.move(200,200)
If you instead want the cursor to visibly move across the screen to a given location, you can use the smooth_move command:
import autopy
autopy.mouse.smooth_move(200,200)