对于上下文,我的任务是模拟特定窗口句柄的所有鼠标交互/输入,而无需鼠标实际位于所述窗口上方。
我在 SendMessageA() 和发送 WM_LBUTTONDOWN 和 UP 以及 R 版本的右键单击方面已经走得很远了。
示例SendMessageA(m_TargetWindow, WM_RBUTTONUP, MK_RBUTTON, MAKELPARAM(x,y));
非常适合在窗口的 x,n 位置发送右按钮向上。
首先,如果我的任务不适用于所有鼠标交互,包括模拟拖动和在这种情况下悬停(并且结束),那么这将为我节省大量时间。
如果可能的话,我会继续找出其余的,但现在悬停比其他发送消息命令更棘手(滚动也是/曾经,但现在解决了它)。阅读文档确实表明了一些细微差别,例如trackmouseevent,但我还没有理解它。我也不确定 Hover 是否是正确的思考方式,因为它可能是鼠标输入/离开类型的交易。
这是我到目前为止所尝试的。
SendMessageA(m_TargetWindow, WM_MOUSEHOVER, MK_LBUTTON, MAKELPARAM(x,y));
和
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags = TME_HOVER;
tme.hwndTrack = m_TargetWindow;
tme.dwHoverTime = HOVER_DEFAULT;
SendMessageA(m_TargetWindow, WM_MOUSEHOVER, MK_LBUTTON, MAKELPARAM(x,y));
这个想法是在窗口的 x 和 y 位置,它将模拟 m_TargetWindow 的悬停事件。