有没有办法在python中调用leftclick?

时间:2012-12-21 23:43:13

标签: python windows automation mouse ctypes

我只有python 2.6。我可以不使用外部库吗?我只想在光标当前的位置执行左键单击。

1 个答案:

答案 0 :(得分:3)

好的,首先您必须知道如何通过ctypes trivial打开user32 windll:

from ctypes import *
user32 = windll.user32

接下来,您要调用的Win32函数可能是SendInput,尽管您可能希望查看mouse_eventSendMessage(以及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结构本身具有MOUSEINPUTKBDINPUTHARDWAREINPUT的联合,因此您还需要定义它们(尽管您可以通过定义首先,假装其他人不存在,因为第一个是你需要的唯一一个)。

因此,使用ctypes执行此操作的步骤为:

  • StructureMOUSEINPUT定义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 ...如果最坏的情况发生,你可能需要回到较低级别的技巧。

这还不够,或者你需要帮助解决这方面的某些特定部分?