【发布时间】:2012-05-08 11:26:06
【问题描述】:
是否可以以编程方式单击另一个窗口中的某个位置,而无需将鼠标移动到该位置,即使该窗口不在顶部?我想向另一个窗口发送一种消息以模拟鼠标单击某个位置。
我尝试使用 PostMessage 来完成此操作:
PostMessage(WindowHandle, 0x201, IntPtr.Zero, CreateLParam(300,300));
PostMessage(WindowHandle, 0x202, IntPtr.Zero, CreateLParam(300,300));
我这样创建了 CreateLParam 函数:
private static IntPtr CreateLParam(int LoWord, int HiWord)
{
return (IntPtr)((HiWord << 16) | (LoWord & 0xffff));
}
问题是窗口被锁定在他的位置。我认为我的应用程序点击了 (1,1) 坐标。有人可以帮我解决这个问题吗?
编辑: 这是 PostMessage:
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr WindowHandle, int Msg, IntPtr wParam, IntPtr lParam);
而0x201和0x202分别是WM_LBUTTONDOWN和WM_LBUTTONUP。
【问题讨论】:
-
这是您控制的另一个窗口吗?如果不是,这似乎是一个非常奇怪的要求。
-
你想点击什么程序?一些程序(主要是游戏)有机制来处理你正在尝试做的事情并忽略它。在这种情况下,您最好的机会是使用 WinApi 使游戏成为最顶级,移动鼠标,单击,将鼠标移回,将游戏移回之前的 z 顺序。
-
另外,在执行
<< 16之前尝试将HiWord转换为uint
标签: c# windows click mouse message