用Python 3控制鼠标?

用Python 3控制鼠标?,python,python-3.x,mouse,Python,Python 3.x,Mouse,我想知道是否有一种方法可以创建一个程序,在特定的坐标下移动和点击东西。我正在使用Python3和Windows8 更好地使用ready库,如其他答案和中建议的库,但也可以通过以下方式使用WinAPI在较低级别上移动/单击鼠标: #在Windows XP上测试,从管理员处运行 导入ctypes 输入数学 导入时间 从ctypes导入c_long、指针、sizeof、c_int 从ctypes.wintypes导入DWORD #选择要与ctypes一起使用的本机Win32 API函数。 # http

我想知道是否有一种方法可以创建一个程序,在特定的坐标下移动和点击东西。我正在使用Python3和Windows8

更好地使用ready库,如其他答案和中建议的库,但也可以通过以下方式使用WinAPI在较低级别上移动/单击鼠标:

#在Windows XP上测试,从管理员处运行
导入ctypes
输入数学
导入时间
从ctypes导入c_long、指针、sizeof、c_int
从ctypes.wintypes导入DWORD
#选择要与ctypes一起使用的本机Win32 API函数。
# https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms648394%28v=vs.85%29.aspx
set\u cursor\u pos\u func=ctypes.windell.user32.SetCursorPos
# https://msdn.microsoft.com/ru-RU/library/windows/desktop/ms646310%28v=vs.85%29.aspx
send\u input\u func=ctypes.windell.user32.SendInput
#定义所需的本机结构。
# https://msdn.microsoft.com/ru-RU/library/windows/desktop/ms646270%28v=vs.85%29.aspx
#typedef结构标记鼠标输入{
#长dx;
#龙迪;
#德沃德·穆塞达塔;
#德沃德旗;
#德沃德时间;
#ULONG_PTR dwextranfo;
#}MOUSEINPUT,*PMOUSEINPUT;
类鼠标输入(ctypes.Structure):
_字段=[
(dx,c_long),,
(dy,c_long),,
(“穆塞达塔”,德沃德),
(“德沃德旗”,德沃德),
(“时间”,德沃德),
(“dwExtraInfo”,指针(c_long)),
]
# https://msdn.microsoft.com/ru-RU/library/windows/desktop/ms646270%28v=vs.85%29.aspx
#typedef结构标记输入{
#德沃德型;
#联合{
#小鼠输入mi;
#keybdki;
#硬件输入hi;
#   };
#}输入,*PINPUT;
类输入(ctypes.Structure):
_字段=[
(“类型”,德沃德),
(“米”,鼠标输入),
]
#定义所需的本机Win32 API常量
输入\鼠标=0
# https://msdn.microsoft.com/ru-RU/library/windows/desktop/ms646273%28v=vs.85%29.aspx
MOUSEEVENTF_MOVE=0x001
MOUSEEVENTF_LEFTDOWN=0x002
MOUSEEVENTF_LEFTUP=0x004
#永无止境
上次单击=time.clock()
尽管如此:
#根据李萨如曲线移动鼠标位置
# (https://en.wikipedia.org/wiki/Lissajous_curve)
t=time.clock()
x=300+300*数学sin(5*t)
y=200+200*数学cos(6*t)
#调用本机Win32 API函数以更改鼠标位置
设置光标位置函数(整数(x),整数(y))
如果t-最后单击>0.3:
#每0.3秒执行一次单击
最后一次单击=t
#要单击,我需要填写输入结构
inp=输入()
inp.type=输入\鼠标
inp.mi.dx=0
inp.mi.dy=0
inp.mi.mouseData=0
inp.mi.time=0
inp.mi.dwExtraInfo=无
#发送鼠标按下输入事件
inp.mi.dwFlags=MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN
res=send\u input\u func(1,ctypes.pointer(inp),sizeof(input))
如果res!=1:
ctypes.FormatError(ctypes.GetLastError())
#向上发送鼠标输入事件
inp.mi.dwFlags=MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTUP
res=send\u input\u func(1,ctypes.pointer(inp),sizeof(input))
如果res!=1:
ctypes.FormatError(ctypes.GetLastError())

最好不要执行此代码。这项计划一旦启动就很难停止。它会随机触发点击,这让它变得更加困难。好吧,在做了更多的研究之后,我找到了一个图书馆。我相信你正在寻找的是非常容易使用的!