私がやろうとしていることはかなり単純だと思いますが、すでに何時間もグーグルで立ち往生しています。
ボタン付きのWindowsフォームがあります。ボタンを押すと、座標 50, 50 でマウスを右クリックしたいと思います。これはフォームの外にあるので、ウィンドウフックで行う必要があると思います。助けてください。
質問する
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
}
そして、このメソッドを使用して、デスクトップにメッセージを送信することを意味する 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 に答える