3
私がやっていることはかなりシンプルだと思うが、すでに何時間もグーグルで立ち往生している。
私はボタン付きのウィンドウフォームを持っています。私がボタンを押すと、50と50の座標でマウスで右クリックをしたいと思っています。これはフォームの外にあるので、ウィンドウフックで行うべきだと思います。 助けてください。キー押しをシミュレートするウィンドウフックの使い方
私がやっていることはかなりシンプルだと思うが、すでに何時間もグーグルで立ち往生している。
私はボタン付きのウィンドウフォームを持っています。私がボタンを押すと、50と50の座標でマウスで右クリックをしたいと思っています。これはフォームの外にあるので、ウィンドウフックで行うべきだと思います。 助けてください。キー押しをシミュレートするウィンドウフックの使い方
フックではなく、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);
メッセージが列挙され、ここにある:
enum Messages
{
WM_LBUTTONDOWN = 0x201,
WM_LBUTTONUP = 0x202,
WM_RBUTTONDOWN = 0x204,
WM_RBUTTONUP = 0x205
}
そして、この方法では、特別な送信する必要がありますhWNDへのメッセージは0になります。これは、Desktopにメッセージを送信することを意味します。あなたを助ける
ここで方法:
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を変えることで。