在Windows下如何控制Python中的鼠标光标,即将其移动到特定位置并单击?
在Windows下如何控制Python中的鼠标光标,即将其移动到特定位置并单击?
Answers:
在安装pywin32(在我的情况下为pywin32-214.win32-py2.6.exe )后,在WinXP上进行了Python 2.6(也已测试3.x)测试:
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))
我的经验,最好替换为更好地与其他应用程序(例如游戏)集成。
python3.x
作品中进行测试,请随时编辑答案
尝试使用PyAutoGUI模块。它是多平台的。
pip install pyautogui
所以:
import pyautogui
pyautogui.click(100, 100)
它还具有其他功能:
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
这比遍历所有win32con内容容易得多。
您可以使用win32api
或ctypes
模块来使用Win32 API来控制鼠标或任何GUI
这是一个使用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)
单击使用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
?
查看跨平台PyMouse:https://github.com/pepijndevos/PyMouse/
tap space
和tap screen shot key
使用PyUswerInput?
PyUserInput
已损坏。无法说出它是否运行良好,因为由于依赖关系破裂,我什至无法安装它。
from Xlib import X, display
d = display.Display()
s = d.screen()
root = s.root
root.warp_pointer(300,300)
d.sync()
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();
根据目标应用程序,可能需要或可能不需要在press和release之间进行sleep()调用。
对于Windows和Mac,Pynput是我发现的最佳解决方案。超级容易编程,并且效果很好。
例如,
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)
快速和肮脏的功能将clicks
在Windows 7中使用该ctypes
库的任何时间单击。无需下载。
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.
如果要移动鼠标,请使用以下命令:
import pyautogui
pyautogui.moveTo(x,y)
如果要单击,请使用以下命令:
import pyautogui
pyautogui.click(x,y)
如果没有 pyautogui
安装,则必须将python附加到CMD。转到CMD并输入:pip install pyautogui
这将安装 pyautogui
Python 2.x。
对于Python 3.x,您可能必须使用pip3 install pyautogui
或python3 -m pip install pyautogui
。
pyautogui.moveTo(x, y)
因为move()
相对于其当前位置移动了光标。
moveTo()
移动到绝对位置,同时move()
相对于当前光标位置移动。
另一个选择是鼠标库,我个人使用它,因为它相对简单且跨平台。
使用方法如下:
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')
这是源代码:如何在Python中控制鼠标
接受的答案对我有用,但不稳定(有时单击不会重新注册),因此我添加了一个额外的MOUSEEVENTF_LEFTUP。然后它可靠地工作
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)
非常简单的1-安装软件包:
pip install mouse
2-将库添加到项目:
import mouse
3-使用它例如:
mouse.right_click()
在此url中描述您可以使用的所有功能: