我正在尝试使用 SendMessage / Post 消息将
WM_LBUTTONDOWN
和 WM_LBUTTONUP
发送到窗口。
在文档中,它表示在某些情况下此消息不会导致鼠标单击:
如果鼠标未被捕获,消息将发布到光标下方的窗口。否则,消息将发布到捕获鼠标的窗口。
为了满足这些条件,我尝试拨打了
ShowWindow(..., SW_SHOW)
和SetForegroundWindow(...)
,然后发送了我的消息。
这似乎将窗口置于最前面,但点击似乎没有任何作用。
我打开 Spy++ 并验证消息正在通过,并且坐标是正确的(通过查看手动点击相同的 x、y 来验证)。
我想知道这些消息是否必须来自被点击的同一个进程。所以我构建了一个DLL并将其注入到进程中。当我远程调用我的函数时,我可以看到消息已在 Spy++ 中收到,但仍然没有结果。
我也看到资料说必须使用
SendInput
才能正确模拟鼠标和键盘输入。我使用这种方法发送点击,它确实在光标所在的位置引起了点击。不管我想点击哪个进程。要在正确的位置发送点击,我似乎需要移动光标并从用户那里获得控制权。然而,我希望避免失去用户控制/与用户自己的鼠标移动作斗争。
我也有点困惑,因为有很多答案表明 SendMessage / PostMessage 可以用于鼠标。
我需要拨打什么电话才能满足收到点击的先决条件。
此外,是否可以单击用户当前未关注的窗口?这是我最初的目标,但此时我愿意接受任何类型的点击。通过阅读其他 SO 答案,这似乎是可能的。