¿Cómo se controla el cursor del mouse en Python, es decir, moverlo a cierta posición y hacer clic en Windows?
¿Cómo se controla el cursor del mouse en Python, es decir, moverlo a cierta posición y hacer clic en Windows?
Respuestas:
Probado en WinXP, Python 2.6 (3.x también probado) después de instalar pywin32 (pywin32-214.win32-py2.6.exe en mi caso):
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)
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE, int(x/SCREEN_WIDTH*65535.0), int(y/SCREEN_HEIGHT*65535.0))
En mi experiencia, es mejor reemplazarlo para una mejor integración con otras aplicaciones como los juegos.
python3.x
las obras también, no dude en corregir la respuesta
Pruebe con el módulo PyAutoGUI . Es multiplataforma.
pip install pyautogui
Y entonces:
import pyautogui
pyautogui.click(100, 100)
También tiene otras características:
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
Esto es mucho más fácil que pasar por todas las cosas de win32con.
Puedes usar win32api
octypes
módulo para usar win32 apis para controlar el mouse o cualquier interfaz gráfica de usuario
Aquí hay un ejemplo divertido para controlar el mouse usando 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 usando 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
SetCursorPos
?
Otra opción es usar el paquete AutoPy multiplataforma . Este paquete tiene dos opciones diferentes para mover el mouse:
Este fragmento de código moverá instantáneamente el cursor a la posición (200,200):
import autopy
autopy.mouse.move(200,200)
Si, en cambio, desea que el cursor se mueva visiblemente por la pantalla a una ubicación determinada, puede usar el comando smooth_move:
import autopy
autopy.mouse.smooth_move(200,200)
Echa un vistazo a la plataforma cruzada PyMouse: https://github.com/pepijndevos/PyMouse/
tap space
y tap screen shot key
mediante PyUswerInput?
PyUserInput
está roto. No puedo decir si funciona bien o no porque ni siquiera puedo hacer que se instale debido a dependencias rotas.
from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
Fuente: movimiento del mouse Python en 5 líneas de código (solo Linux) .
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();
la llamada sleep () entre la prensa y la liberación puede o no ser requerida dependiendo de la aplicación de destino.
Pynput es la mejor solución que he encontrado, tanto para Windows como para Mac. Súper fácil de programar y funciona muy bien.
Por ejemplo,
from pynput.mouse import Button, Controller
mouse = Controller()
# Read pointer position
print('The current pointer position is {0}'.format(
mouse.position))
# Set pointer position
mouse.position = (10, 20)
print('Now we have moved it to {0}'.format(
mouse.position))
# Move pointer relative to current position
mouse.move(5, -5)
# Press and release
mouse.press(Button.left)
mouse.release(Button.left)
# Double click; this is different from pressing and releasing
# twice on Mac OSX
mouse.click(Button.left, 2)
# Scroll two steps down
mouse.scroll(0, 2)
Función rápida y sucia que hará clic izquierdo en cualquier clicks
momento en Windows 7 usando la ctypes
biblioteca. No se requieren descargas.
import ctypes
SetCursorPos = ctypes.windll.user32.SetCursorPos
mouse_event = ctypes.windll.user32.mouse_event
def left_click(x, y, clicks=1):
SetCursorPos(x, y)
for i in xrange(clicks):
mouse_event(2, 0, 0, 0, 0)
mouse_event(4, 0, 0, 0, 0)
left_click(200, 200) #left clicks at 200, 200 on your screen. Was able to send 10k clicks instantly.
A partir de 2020 , puede usar el mouse :
import mouse
mouse.move("500", "500")
mouse.left_click()
Caracteristicas
Si desea mover el mouse, use esto:
import pyautogui
pyautogui.moveTo(x,y)
Si desea hacer clic, use esto:
import pyautogui
pyautogui.click(x,y)
Si no lo ha pyautogui
instalado, debe tener Python conectado a CMD. Vaya a CMD y escriba:pip install pyautogui
Esto se instalará pyautogui
para Python 2.x.
Para Python 3.x, probablemente tendrá que usar pip3 install pyautogui
o python3 -m pip install pyautogui
.
pyautogui.moveTo(x, y)
porque move()
mueve el cursor en relación con su posición actual.
moveTo()
se mueve a una ubicación absoluta, mientras que se move()
mueve en relación con la ubicación actual del cursor.
Otra alternativa sería la biblioteca de mouse , personalmente la uso, ya que es relativamente simple y multiplataforma.
Así es como puedes usarlo:
import mouse
# move 100 right and 100 down with a duration of 0.5 seconds
mouse.move(100, 100, absolute=False, duration=0.5)
# left click
mouse.click('left')
# right click
mouse.click('right')
Aquí está la fuente: Cómo controlar su mouse en Python
La respuesta aceptada funcionó para mí, pero era inestable (a veces los clics no se registraban), así que agregué un MOUSEEVENTF_LEFTUP adicional . Entonces estaba funcionando de manera confiable
import win32api, win32con
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
click(10,10)
muy fácil 1- instalar pakage:
pip install mouse
2- agregar biblioteca al proyecto:
import mouse
3- úsalo por ejemplo:
mouse.right_click()
en esta url describa todas las funciones que puede usar: