gpt4 book ai didi

python - 如何用python模拟桌面在(x,y)位置的点击?

转载 作者:行者123 更新时间:2023-11-28 21:56:22 28 4
gpt4 key购买 nike

我正在尝试单击桌面上的某个位置,我正在使用带有 win32 api 的 python,我正在使用 python 32 位,但我的计算机是 64 位计算机。我相信 lParam 变量没有保存我期望的值,而且我对这个变量本身仍然有点困惑,假设我从 wintypes 导入它谁能告诉我如何使用它?为什么我下面的功能不起作用?

我有一个函数如下,这似乎不起作用:

def clickDesktop(x=0, y=0):

# Get handle to desktop window
desktop = win32gui.GetDesktopWindow()

# Create variable lParam that contains the x-coordinate in the low-order word while
# the high-order word contains the y coordinate.
lParam = y << 16 | x

# Click at x, y in the desktop window
win32gui.PostMessage(desktop, win32con.WM_LBUTTONDOWN, MK_LBUTTON, lParam)
win32gui.PostMessage(desktop, win32con.WM_LBUTTONUP, 0, lParam)

最佳答案

以下代码适用于 Windows 7 上的 Python33。

我使用了 ctypes

WM_LBUTTONDBLCLKLPARAM 参数将 x 和 y 合并为一个 32 位值。

当我运行该代码时,它会打开位于桌面左上角的“我的电脑”图标(我的任务栏也在左侧,因此 x 的高值为 110)。

from ctypes import windll

WM_LBUTTONDBLCLK = 0x0203
MK_LBUTTON = 0x0001

if __name__=='__main__':
hProgman = windll.User32.FindWindowW( "Progman", 0 )
if hProgman != 0:
hFolder = windll.User32.FindWindowExW( hProgman, 0, "SHELLDLL_DefView", 0 )
if hFolder != 0:
hListView = windll.User32.FindWindowExW( hFolder, 0, "SysListView32", 0 )
if hListView != 0:
windll.User32.PostMessageW( hListView, WM_LBUTTONDBLCLK, MK_LBUTTON,
110 + (65536*32) )

编辑WM_LBUTTON* 消息通常由 Windows 发布到指针下的窗口。桌面窗口窗口,也就是那些“在指针下”的子窗口。如果您想要使用 PostMessage API,您需要知道您将把消息发布到哪个窗口。

如果您不想理会 Windows 层次结构,只需使用 SendInput。然后 Window 将为您完成工作,并最终将鼠标消息发送到正确的句柄。

关于python - 如何用python模拟桌面在(x,y)位置的点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21586632/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com