我相信我正在尝试做的事情相当简单,但已经在谷歌上搜索了几个小时。
我有一个带有按钮的 Windows 窗体。当我按下按钮时,我想用鼠标在坐标 50、50 上单击鼠标右键。这在表单之外,所以我认为应该使用 windowhook 来完成。请帮忙。
问问题
745 次
1 回答
3
您不应该使用钩子,而是使用 WinApi。您需要来自 USER32.DLL 的 2 种方法之一(在 MSDN 中了解不同):
[DllImport("user32.dll")]
private static extern bool SendMessage(int hnd, Messages msg, int wParam, uint lParam);
[DllImport("user32.dll")]
private static extern bool PostMessage(int hWnd, Messages msg, int wParam, int lParam);
Messages 是一个枚举,这里是:
enum Messages
{
WM_LBUTTONDOWN = 0x201,
WM_LBUTTONUP = 0x202,
WM_RBUTTONDOWN = 0x204,
WM_RBUTTONUP = 0x205
}
使用这种方法,您应该向 hWND 发送特殊消息等于 0,这意味着向 Desktop 发送消息。
这里有帮助你的方法:
public static void MouseLeftClick(Point p)
{
int coordinates = p.X | (p.Y << 16);
PostMessage(0, Messages.WM_LBUTTONDOWN, 0x1, coordinates);
PostMessage(0, Messages.WM_LBUTTONUP, 0x1, coordinates);
}
public static void MouseRightClick(Point p)
{
int coordinates = p.X | (p.Y << 16);
PostMessage(0, Messages.WM_RBUTTONDOWN, 0x1, coordinates);
PostMessage(0, Messages.WM_RBUTTONUP, 0x1, coordinates);
}
通过将 0 更改为任何窗口的句柄,您可以在所需的任何窗口中按左或右按钮。
于 2012-05-04T14:10:35.510 回答