如何使用窗钩来模拟按键

时间:2012-05-04 14:00:13

标签: c# winforms c#-4.0

我相信我要做的事情相当简单,但已经被谷歌搜索了好几个小时 我有一个带有按钮的Windows窗体。当我按下按钮时,我想用我的鼠标在坐标50,50上执行右键单击。这在表格之外,所以我认为应该使用窗口挂钩来完成。 请帮忙。

1 个答案:

答案 0 :(得分:3)

你应该使用not hook,但是WinApi。 您需要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);

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

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

相关问题