web-dev-qa-db-ja.com

マウスイベントの指示[DllImport( "user32.dll")]クリック、ダブルクリック

[DllImport( "user32.dll")] static extern bool SetCursorPos(int X、int Y);を試しました。

カーソルを目的のポイントに移動することは非常にうまく機能します。私はこれまでそのような種類のDLLインポートを試したことがありませんが、動作します:)。しかし、他に何を抽出できますか?主に、マウス入力なしでダブルクリック、クリック、またはホイールオプションを使用したいのですが、コードだけでそれを行うことができますか? user32dllに他に何が含まれているのかを確認するにはどうすればよいですか?

ありがとう

11
albatross
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, UIntPtr dwExtraInfo);
private const uint MOUSEEVENTF_LEFTDOWN = 0x02;
private const uint MOUSEEVENTF_LEFTUP = 0x04;
private const uint MOUSEEVENTF_RIGHTDOWN = 0x08;
private const uint MOUSEEVENTF_RIGHTUP = 0x10;

Win32APIを使用してマウスを操作するには、これらの定数をインポートして定義する必要があります

以下の方法を使用して、マウス操作を実行します

void sendMouseRightclick(Point p)
{
    mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, p.X, p.Y, 0, 0);
}

void sendMouseDoubleClick(Point p)
{
    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, p.X, p.Y, 0, 0);

Thread.Sleep(150);

    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, p.X, p.Y, 0, 0);
}

void sendMouseRightDoubleClick(Point p)
{
    mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, p.X, p.Y, 0, 0);

    Thread.Sleep(150);

    mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, p.X, p.Y, 0, 0);
}

void sendMouseDown()
{
    mouse_event(MOUSEEVENTF_LEFTDOWN, 50, 50, 0, 0);
}

void sendMouseUp()
{
    mouse_event(MOUSEEVENTF_LEFTUP, 50, 50, 0, 0);
}

マウスドラッグを実行する場合は、最初にMouseDown(Mouse Click)を送信し、MouseUp(Release Click)を送信するよりも、マウスの位置を変更している間はクリックしたままにする必要があります。

sendMouseDown();
Cursor.Position = new Point(30,30);
sendMouseUp();
15
Burimi

Long型を使用すると、「PInvoke」エラーが発生します。

Int型を使用する必要があります:

[DllImport("user32.dll")]
static extern void mouse_event(int dwFlags, int dx, int dy, 
                      int dwData, int dwExtraInfo);

[Flags]
public enum MouseEventFlags
{
    LEFTDOWN = 0x00000002,
    LEFTUP = 0x00000004,
    MIDDLEDOWN = 0x00000020,
    MIDDLEUP = 0x00000040,
    MOVE = 0x00000001,
    ABSOLUTE = 0x00008000,
    RIGHTDOWN = 0x00000008,
    RIGHTUP = 0x00000010
}

public static void LeftClick(int x, int y)
{
    Cursor.Position = new System.Drawing.Point(x, y);
    mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
    mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
}

ソース: http://www.pinvoke.net/default.aspx/user32.mouse_event

5
Behzad

利用可能なAPIのリストについては、 pinvoke.net をご覧ください。コード例とインポートステートメントが含まれています。左側の選択を展開して、各DLLで使用可能なAPIを表示することもできます。

3
Lukazoid