我只有Python2.6。我可以不使用外部库来执行此操作吗?我只想在光标当前所在的位置执行左键单击。

最佳答案

好的,首先你必须知道如何通过ctypes打开user32 windll,也就是trivial

from ctypes import *
user32 = windll.user32

接下来,您要调用的win32函数可能是SendInput,尽管您可能需要查看mouse_eventSendMessage(以及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结构本身有一个INPUTMOUSEINPUTKBDINPUT的联合体,因此您还需要定义它们(尽管您可以只定义第一个并假装其他的不存在,因为第一个是您唯一需要的)。
因此,使用HARDWAREINPUT执行此操作的步骤是:
定义ctypesStructureMOUSEINPUTs。
加载INPUT风铃。
user32设置argtypes
使用user32.SendInput创建第一个MOUSEINPUT实例,并使用dwFlags= MOUSEEVENTF_LEFTDOWN实例。
呼叫INPUTuser32.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/

10-10 19:11