如何使用窗口钩子模拟按键操作

3

我相信我要做的事情非常简单,但是已经花了几个小时去搜索解决方法了。
我有一个带有按钮的 Windows 表单。当我按下按钮时,我想在坐标50,50上用鼠标执行右键单击操作。这是在表单外部的,所以我认为应该使用窗口钩子来完成。 请帮忙。

1个回答

3
你应该使用WinApi而非hook。 你需要从USER32.DLL中选择其中的两种方法(请在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的桌面发送特殊消息。

以下是可帮助您的方法:

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更改为任何窗口的句柄,您可以在想要的任何窗口中按下左或右按钮。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接