我只有python 2.6。我可以不使用外部库吗?我只想在光标当前的位置执行左键单击。
答案 0 :(得分:3)
好的,首先您必须知道如何通过ctypes
trivial打开user32 windll:
from ctypes import *
user32 = windll.user32
接下来,您要调用的Win32函数可能是SendInput,尽管您可能希望查看mouse_event
和SendMessage
(以及WM_ *消息对应的文档)鼠标点击)进行比较和对比。
假设您使用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
定义INPUT
。user32
windll。user32.SendInput
设置argtypes
。MOUSEINPUT
创建您的第一个dwFlags= MOUSEEVENTF_LEFTDOWN
实例,然后使用INPUT
实例。user32.SendInput(1, [myinput], len(INPUT))
或user32.SendInput(1, addressof(myinput), len(INPUT))
或其他(取决于您如何定义argtypes
)。MOUSEINPUT
创建第二个dwFlags= MOUSEEVENTF_LEFT
实例,然后使用INPUT
实例。user32.SendInput()
。最后一点:在Vista及以上版本中,您必须拥有正确的“完整性级别”才能执行此操作。例如,普通应用程序无法向“提升”应用程序(例如,安装程序)发送点击。希望这对你来说不是问题。如果是,你需要阅读UIPI和UAC ...如果最坏的情况发生,你可能需要回到较低级别的技巧。
这还不够,或者你需要帮助解决这方面的某些特定部分?