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

本文关键字:模拟 何使用 窗口 | 更新日期: 2023-09-27 18:33:07

我相信我想做的事情相当简单,但已经在谷歌上停留了几个小时。
我有一个带按钮的窗口窗体。当我按下按钮时,我想用鼠标右键单击坐标 50、50。这是在表单之外,所以我认为应该用窗钩来完成。请帮忙。

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

你应该使用不是钩子,而是WinApi。您需要 USER32 中的 2 种方法之一.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);

消息是一个枚举,这里是:

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