3

私がやろうとしていることはかなり単純だと思いますが、すでに何時間もグーグルで立ち往生しています。
ボタン付きのWindowsフォームがあります。ボタンを押すと、座標 50, 50 でマウスを右クリックしたいと思います。これはフォームの外にあるので、ウィンドウフックで行う必要があると思います。助けてください。

4

1 に答える 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
}

そして、このメソッドを使用して、デスクトップにメッセージを送信することを意味する 0 に等しい hWND に特別なメッセージを送信する必要があります。

ここであなたを助ける方法:

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 に答える