SendMessage() 仅在窗口打开时起作用,在最小化时不起作用

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

我一直在使用

SendMessage
将鼠标点击发送到几个窗口。一个是游戏(一切正常),但另一个窗口,作为游戏的第三方工具,遇到了
SendMessage
的麻烦。如果窗口“未最小化”,则一切正常,即使窗口被另一个窗口完全覆盖也没关系。但是,如果同一个窗口被最小化,那么什么也不会发生,我用间谍++检查过,消息确实被接收但没有被处理(正确的术语?)。过去几天我试图解决这个问题,在这里和谷歌上都进行了搜索,很多主题但没有任何帮助?

//MyImports
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

这就是我包裹它的方式

public static void LClick(string windowclass, int x, int y)
{
    IntPtr WHandle = FindWindow(windowclass, null);
    SendMessage(WHandle, (int)WMessages.WM_LBUTTONDOWN, (IntPtr)1, (IntPtr)MakeLParam(x, y));
    SendMessage(WHandle, (int)WMessages.WM_LBUTTONUP, (IntPtr)0, (IntPtr)MakeLParam(x, y));
}

我尝试过聚焦、激活。可能有用的信息之一是第三方程序正在作为游戏的

module("Qt5QWindowIcon")
加载。

我也尝试了

PostMessage
,最小化时它与
SendMessage()
同样的问题做了同样的事情。

这个游戏确实允许宏和无人值守的宏,提示设计用于执行宏的第三部分工具(由创建者发布)我只是想模拟鼠标单击程序来启动宏。

我只会使用

SendInput
,但我的程序的全部目的是在后台运行。

c# sendmessage
2个回答
0
投票

我认为可能是由于句柄使用不当造成的,比如hWnd的值等于MainWindowHandle或者其他什么。 MainWindowHandle似乎只有在窗口显示时才有效。


-1
投票

我遇到了同样的问题。请更改程序集名称和项目名称(更改的名称不是以您抛出/发布 Windows 消息的名称开头),然后重建并检查它。现在您就可以调试了。

© www.soinside.com 2019 - 2024. All rights reserved.