我只有Python 2.6。 我可以做到这一点,而不使用外部库? 我只想在当前光标的任何位置执行左键单击。
好的,首先你必须知道如何通过ctypes
打开user32,这很简单 :
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
的联合, MOUSEINPUT
还需要定义这些结构(尽管可以通过定义第一个和假装其他结构不存在来解决,因为第一个是唯一的你需要一个)。
所以,与ctypes
做这个步骤是:
MOUSEINPUT
和INPUT
的Structure
。 user32
windll。 user32.SendInput
的argtypes
。 dwFlags= MOUSEEVENTF_LEFTDOWN
和INPUT
实例创建你的第一个MOUSEINPUT
实例。 user32.SendInput(1, [myinput], len(INPUT))
或user32.SendInput(1, addressof(myinput), len(INPUT))
或其他(取决于你如何定义argtypes
)。 dwFlags= MOUSEEVENTF_LEFT
和INPUT
实例创建第二个MOUSEINPUT
实例。 user32.SendInput()
。 最后一个注意事项:在Vista及更高版本上,您必须拥有正确的“完整性级别”来执行此操作。 例如,一个普通的应用程序不能发送一个点击“提升”的应用程序(如安装程序)。 希望这不是你的问题。 如果是这样,你需要阅读UIPI和UAC …如果最糟糕的是最糟糕的,你可能需要回到更低层次的技巧。
这是足够的,还是你需要帮助这个特定的部分?