我必须发送什么 Windows 消息才能单击 WM_LBUTTONDOWN

问题描述 投票:0回答:0

目标

我正在尝试使用 SendMessage / Post 消息将

WM_LBUTTONDOWN
WM_LBUTTONUP
发送到窗口。

我试过的

文档中,它表示在某些情况下此消息不会导致鼠标单击:

如果鼠标未被捕获,消息将发布到光标下方的窗口。否则,消息将发布到捕获鼠标的窗口。

  1. 为了满足这些条件,我尝试拨打了

    ShowWindow(..., SW_SHOW)
    SetForegroundWindow(...)
    ,然后发送了我的消息。

    这似乎将窗口置于最前面,但点击似乎没有任何作用。

    我打开 Spy++ 并验证消息正在通过,并且坐标是正确的(通过查看手动点击相同的 x、y 来验证)。

  2. 我想知道这些消息是否必须来自被点击的同一个进程。所以我构建了一个DLL并将其注入到进程中。当我远程调用我的函数时,我可以看到消息已在 Spy++ 中收到,但仍然没有结果。

  3. 我也看到资料说必须使用

    SendInput
    才能正确模拟鼠标和键盘输入。我使用这种方法发送点击,它确实在光标所在的位置引起了点击。不管我想点击哪个进程。要在正确的位置发送点击,我似乎需要移动光标并从用户那里获得控制权。然而,我希望避免失去用户控制/与用户自己的鼠标移动作斗争。

    我也有点困惑,因为有很多答案表明 SendMessage / PostMessage 可以用于鼠标。

问题

我需要拨打什么电话才能满足收到点击的先决条件。

此外,是否可以单击用户当前未关注的窗口?这是我最初的目标,但此时我愿意接受任何类型的点击。通过阅读其他 SO 答案,这似乎是可能的。

windows sendmessage postmessage user32 sendinput
© www.soinside.com 2019 - 2024. All rights reserved.