トップ  >  サンプルソース  >  マウスの擬似操作(C#/VB.NET)

マウスの擬似操作(C#/VB.NET)

2011年12月22日

マウスの移動やマウスボタンのクリック操作を擬似的に再現するサンプル(ソース/コード)です。推奨されているAPI(SendInput)を使用しています。
※mouse_eventは推奨されていません

(参考)マウス操作やキーボード操作をシミュレーションするサンプル

' ----------------------------------------------------------
' 擬似的にマウスを操作するサンプル(VB.NET/VS2005)
' Imports System.Runtime.InteropServicesの宣言が必要
' ----------------------------------------------------------
' mouse_eventの引数と同様のデータ
<StructLayout(LayoutKind.Sequential)> _
Private Structure MOUSEINPUT
    Public dx As Integer
    Public dy As Integer
    Public mouseData As Integer
    Public dwFlags As Integer
    Public time As Integer
    Public dwExtraInfo As Integer
End Structure

' SendInputの引数データ
<StructLayout(LayoutKind.Sequential)> _
Private Structure INPUT
    Public type As Integer
    Public mi As MOUSEINPUT
End Structure

' マウス操作をシミュレート(擬似操作)
<DllImport("user32.dll")> _
Private Shared Sub SendInput( _
    ByVal nInputs As Integer, _
    ByRef pInputs As INPUT, _
    ByVal cbsize As Integer)
End Sub

Private Const INPUT_MOUSE = 0               ' マウスイベント

Private Const MOUSEEVENTF_MOVE = &H1        ' マウス移動
Private Const MOUSEEVENTF_ABSOLUTE = &H8000 ' 絶対座標指定
Private Const MOUSEEVENTF_LEFTDOWN = &H2    ' 左 ボタン押す
Private Const MOUSEEVENTF_LEFTUP = &H4      ' 左 ボタン離す
Private Const MOUSEEVENTF_RIGHTDOWN = &H8   ' 右 ボタン押す
Private Const MOUSEEVENTF_RIGHTUP = &H10    ' 右 ボタン離す
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' 中央ボタン押す
Private Const MOUSEEVENTF_MIDDLEUP = &H40   ' 中央ボタン離す
Private Const MOUSEEVENTF_WHEEL = &H800     ' ホイール回転
Private Const WHEEL_DELTA = 120             ' ホイール値

Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
    Dim inp As INPUT = New INPUT

    ' マウスカーソルの移動(800ピクセル,Y=400ピクセル)
    inp.type = INPUT_MOUSE
    inp.mi.dwFlags = _
        MOUSEEVENTF_MOVE Or MOUSEEVENTF_ABSOLUTE
    inp.mi.dx = _
        800 * (65535 / Screen.PrimaryScreen.Bounds.Width)
    inp.mi.dy = _
        400 * (65535 / Screen.PrimaryScreen.Bounds.Height)
    inp.mi.mouseData = 0
    inp.mi.dwExtraInfo = 0
    inp.mi.time = 0
    SendInput(1, inp, Marshal.SizeOf(inp))

    ' マウス左ボタンを押す
    inp.type = INPUT_MOUSE
    inp.mi.dwFlags = MOUSEEVENTF_LEFTDOWN
    inp.mi.dx = 0
    inp.mi.dy = 0
    inp.mi.mouseData = 0
    inp.mi.dwExtraInfo = 0
    inp.mi.time = 0
    SendInput(1, inp, Marshal.SizeOf(inp))

    ' マウス左ボタンを離す
    inp.type = INPUT_MOUSE
    inp.mi.dwFlags = MOUSEEVENTF_LEFTUP
    inp.mi.dx = 0
    inp.mi.dy = 0
    inp.mi.mouseData = 0
    inp.mi.dwExtraInfo = 0
    inp.mi.time = 0
    SendInput(1, inp, Marshal.SizeOf(inp))
End Sub
' ----------------------------------------------------------

// ---------------------------------------------------------
// 擬似的にマウスを操作するサンプル(C#.NET/VS2005)
// using System.Runtime.InteropServices;の宣言が必要
// ---------------------------------------------------------
// mouse_eventの引数と同様のデータ
[StructLayout(LayoutKind.Sequential)]
private struct MOUSEINPUT
{
    public int dx;
    public int dy;
    public int mouseData;
    public int dwFlags;
    public int time;
    public int dwExtraInfo;
};

// SendInputの引数データ
[StructLayout(LayoutKind.Sequential)]
private struct INPUT
{
    public int type;
    public MOUSEINPUT mi;
};

// マウス操作をシミュレート(擬似操作)
[DllImport("user32.dll")]
private extern static void SendInput(
    int nInputs, ref INPUT pInputs, int cbsize);

private const int INPUT_MOUSE = 0;              // マウスイベント

private const int MOUSEEVENTF_MOVE = 0x1;       // マウス移動
private const int MOUSEEVENTF_ABSOLUTE = 0x8000;// 絶対座標指定
private const int MOUSEEVENTF_LEFTDOWN = 0x2;   // 左ボタン押す
private const int MOUSEEVENTF_LEFTUP = 0x4;     // 左ボタン離す
private const int MOUSEEVENTF_RIGHTDOWN = 0x8;  // 右ボタン押す
private const int MOUSEEVENTF_RIGHTUP = 0x10;   // 右ボタン離す
private const int MOUSEEVENTF_MIDDLEDOWN = 0x20;// 中ボタン押す
private const int MOUSEEVENTF_MIDDLEUP = 0x40;  // 中ボタン離す
private const int MOUSEEVENTF_WHEEL = 0x800;    // ホイール回転
private const int WHEEL_DELTA = 120;            // ホイール値

private void button1_Click(object sender, EventArgs e)
{
    INPUT inp = new INPUT();

    // マウスカーソルの移動(800ピクセル,Y=400ピクセル)
    inp.type = INPUT_MOUSE;
    inp.mi.dwFlags =
        MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
    inp.mi.dx =
        800 * (65535 / Screen.PrimaryScreen.Bounds.Width);
    inp.mi.dy =
        400 * (65535 / Screen.PrimaryScreen.Bounds.Height);
    inp.mi.mouseData = 0;
    inp.mi.dwExtraInfo = 0;
    inp.mi.time = 0;
    SendInput(1, ref inp, Marshal.SizeOf(inp));

    // マウス左ボタンを押す
    inp.type = INPUT_MOUSE;
    inp.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
    inp.mi.dx = 0;
    inp.mi.dy = 0;
    inp.mi.mouseData = 0;
    inp.mi.dwExtraInfo = 0;
    inp.mi.time = 0;
    SendInput(1, ref inp, Marshal.SizeOf(inp));

    // マウス左ボタンを離す
    inp.type = INPUT_MOUSE;
    inp.mi.dwFlags = MOUSEEVENTF_LEFTUP;
    inp.mi.dx = 0;
    inp.mi.dy = 0;
    inp.mi.mouseData = 0;
    inp.mi.dwExtraInfo = 0;
    inp.mi.time = 0;
    SendInput(1, ref inp, Marshal.SizeOf(inp));
}
// ---------------------------------------------------------
スポンサーサイト

キーボードの擬似操作(C#/VB.NET) | トップページへ戻る | オススメのドッグラン

このページのトップに戻る

コメント

名前
題名
メールアドレス
WEBサイト
 
コメント
パスワード
  管理者にだけ表示を許可する

このページのトップに戻る

トラックバック

このページのトップに戻る