我只有Python2.6。我可以不使用外部库来执行此操作吗?我只想在光标当前所在的位置执行左键单击。
最佳答案
好的,首先你必须知道如何通过ctypes
打开user32 windll,也就是trivial:
from ctypes import *
user32 = windll.user32
接下来,您要调用的win32函数可能是SendInput,尽管您可能需要查看
mouse_event
和SendMessage
(以及wm_ux3;messages对应于鼠标单击的文档)以进行比较和对比。假设您使用
SendInput
,您将发送一个MOUSEEVENTF_LEFTDOWN
,然后是一个MOUSEEVENTF_LEFTUP
,除了dwFlags
,所有参数都为0。那么,你怎么称呼这个?好吧,这是C API:
UINT WINAPI SendInput(
_In_ UINT nInputs,
_In_ LPINPUT pInputs,
_In_ int cbSize
);
这意味着您有一个指向
LPINPUT
结构数组的指针。由于INPUT
结构本身有一个INPUT
、MOUSEINPUT
和KBDINPUT
的联合体,因此您还需要定义它们(尽管您可以只定义第一个并假装其他的不存在,因为第一个是您唯一需要的)。因此,使用
HARDWAREINPUT
执行此操作的步骤是:定义
ctypes
和Structure
的MOUSEINPUT
s。加载
INPUT
风铃。为
user32
设置argtypes
。使用
user32.SendInput
创建第一个MOUSEINPUT
实例,并使用dwFlags= MOUSEEVENTF_LEFTDOWN
实例。呼叫
INPUT
或user32.SendInput(1, [myinput], len(INPUT))
或其他(取决于您如何定义user32.SendInput(1, addressof(myinput), len(INPUT))
)。使用
argtypes
创建第二个MOUSEINPUT
实例,并使用dwFlags= MOUSEEVENTF_LEFT
实例。再次致电
INPUT
。最后一个注意事项:在vista和更高版本上,您必须拥有正确的“完整性级别”才能做到这一点。例如,普通应用程序无法向“提升”应用程序(例如,安装程序)发送单击。希望这不是你的问题。如果是的话,你需要阅读uipi和uac……如果最坏的情况出现,你可能需要回到低级技巧上来。
够了吗?还是你需要帮助来解决这个问题?
关于python - 有没有办法在python中调用leftclick?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13998610/