python/win32:如何向窗口发送点击事件?

1 投票
1 回答
2723 浏览
提问于 2025-04-16 01:58

我想在一个窗口上模拟鼠标点击,但我想直接把点击事件发送到这个窗口,而不是通过一般的鼠标点击方式来模拟,比如用 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0)。请问应该怎么做呢?我试过以下的方法,但似乎没有效果:

def MAKELONG(low, high):
    return low | (high << 16)
win32gui.PostMessage(window,
                     win32con.WM_LBUTTONDOWN,
                     win32con.MK_LBUTTON,
                     MAKELONG(21,42))
time.sleep(0.05)
win32gui.PostMessage(window,
                     win32con.WM_LBUTTONUP,
                     0,
                     MAKELONG(21,42))

window 是这个窗口的正确句柄。在这个例子中,我是想让文件菜单激活。

1 个回答

0

如果说window是拥有这个菜单的窗口,那么这样做是行不通的,因为WM_LBUTTONDOWN是针对窗口的客户区域的,而菜单区域属于非客户区域。我没有测试过这个,不过你可以试试发送WM_NCLBUTTONDOWN,并且wParam设置为HTMENU,同时使用屏幕坐标来表示鼠标位置。

另一种选择是直接使用GetSubMenuTrackPopupMenu。不过这样做的唯一问题是,如果你希望用户能够继续浏览其他子菜单,就会有点麻烦。

撰写回答