我试图点击桌面上的某个地方,我使用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)
答案 0 :(得分:3)
可能更容易安装pywinauto
并将ClickInput
与find_windows
和Rectangle
结合使用
实施链接:
答案 1 :(得分:2)
以下代码适用于Windows 7上的Python33。
我使用了ctypes
。
LPARAM
的{{1}}参数将x和y组合在一个32位值中。
当我运行该代码时,它会打开位于桌面左上角的“我的电脑”图标(我的TaskBar也位于左侧,因此x的高值为110)。
WM_LBUTTONDBLCLK
EDIT
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) )
消息通常由Windows发布到指针下的窗口。桌面窗口具有 子窗口,那就是那些“在指针下”的子窗口。如果您想要使用PostMessage API,您需要知道将在哪个窗口发布消息。
如果您不想打扰Windows层次结构,只需使用WM_LBUTTON*
即可。然后,窗口将为您完成工作,最后将鼠标消息发布到正确的句柄。