C# 在特定位置模拟鼠标按下,而不关注windows I目标

C# 在特定位置模拟鼠标按下,而不关注windows I目标,c#,input,mouse,C#,Input,Mouse,我认为这个问题的标题很清楚 const int WM_KEYDOWN = 0x100; const int WM_KEYUP = 0x101; const int WM_SYSCOMMAND = 0x018; const int SC_CLOSE = 0x053; const int WM_MOUSEMOVE = 0x200; int WindowToFind = FindWindow(null, "

我认为这个问题的标题很清楚

        const int WM_KEYDOWN = 0x100;
        const int WM_KEYUP = 0x101;
        const int WM_SYSCOMMAND = 0x018;
        const int SC_CLOSE = 0x053;
        const int WM_MOUSEMOVE = 0x200;
        int WindowToFind = FindWindow(null, "Untitled - Paint");
        PostMessage(WindowToFind, WM_MOUSEMOVE, 400, 500);
        PostMessage(WindowToFind, WM_KEYDOWN, ((int)Keys.LButton), 0);
        PostMessage(WindowToFind, WM_KEYUP, ((int)Keys.LButton), 0);
上面是当前代码。这不起作用。(然而postmessage确实会发布实际的按键,比如我想按A键,它就会这样做。但是它在鼠标上失败了,或者我失败了)


我还必须指出,我甚至不知道lparam实际上是什么,我只是将它设置为null,将wparam设置为key。我甚至不确定我是否应该使用wm_mousemove,因为它看起来像是“接收”而不是实际设置位置。然后我读到Lparam应该设置为同时包含x和y,比如500*0x10000+500,wparam设置为0等等,这没有帮助。谷歌搜索其他方式也没有帮助。我真的不在乎方法,我只想在另一个没有焦点的窗口上,在某个位置按下鼠标左键。也许你在找()


p/Invoke中的示例代码还显示了如何使用,以及是否希望以编程方式提供另一个窗口焦点(不确定这是否是您试图实现的)。

WM\u KEYDOWN和WM\u keydup用于键盘事件。你可能想试试WM_LBUTTONUP和WM_LBUTTONDOWN?你是真的,我在这里有点迷路了。我还研究了sendinput,它的问题是,正如您所说的,它要求窗口可见/在前面。我正在寻找更多的“让我们在后台做”的解决方案,而不干扰用户。既然你似乎很有经验,我可以问一下,你觉得有没有办法做到我刚才说的?如果没有,也许我应该使用sendinput。正确地回答了那个问题。不能可靠地完成。另外,Johan对问题的评论也是正确的,您需要使用鼠标的WM_LBUTTONUP/DOWN消息。许多分钟后,我通过Johan所说的和((int)Keys.LButton)将此作为第三个参数来修复问题。