2023年12月18日发(作者:)

c# 调用API控制鼠标移动单击双击以及滚轮的公共类

using System;

using ;

using pServices; using g;

using ;

namespace KeyboardHook

{

///

/// Mouse buttons that can be pressed

///

public enum MouseButton

{

Left = 0x2,

Right = 0x8,

Middle = 0x20

}

///

/// Operations that simulate mouse events

///

public static class MouseSimulator

{

#region Windows API Code

[DllImport("")]

static extern int ShowCursor(bool show);

[DllImport("User32")]

public extern static void SetCursorPos(int x, int y);

[DllImport("")]

static extern void mouse_event(int flags, int dX, int dY, int

buttons, int

extraInfo);

[DllImport("")]

static extern void PostMessage(IntPtr hWnd, int Msg, int wParam,

uint

lParam);

const int MOUSEEVENTF_MOVE = 0x1;

const int MOUSEEVENTF_LEFTDOWN = 0x2;

const int MOUSEEVENTF_LEFTUP = 0x4;

const int MOUSEEVENTF_RIGHTDOWN = 0x8;

const int MOUSEEVENTF_RIGHTUP = 0x10;

const int MOUSEEVENTF_MIDDLEDOWN = 0x20;

const int MOUSEEVENTF_MIDDLEUP = 0x40;

const int MOUSEEVENTF_WHEEL = 0x800;

const int MOUSEEVENTF_ABSOLUTE = 0x8000;

const int WM_MOUSEMOVE = 0x200;

const int WM_LBUTTONDOWN = 0x201;

const int WM_RBUTTONDOWN = 0x204;

const int WM_MBUTTONDOWN = 0x207;

const int WM_LBUTTONUP = 0x202;

const int WM_RBUTTONUP = 0x205;

const int WM_MBUTTONUP = 0x208;

#endregion

#region Properties

///

/// Gets or sets a structure that represents both X and Y mouse

coordinates

///

public static Point Position

{

get

{

return new Point(on.X, on.Y);

}

set

{

on = value;

}

}

///

/// Gets or sets only the mouse's x coordinate

///

public static int X

{

get

{

return on.X;

}

set

{

on = new Point(value, Y);

}

}

///

/// Gets or sets only the mouse's y coordinate

///

public static int Y

{

get

{

return on.Y;

}

set

{

on = new Point(X, value);

}

}

#endregion

#region Methods

///

/// Press a mouse button down

///

///

public static void MouseDown(MouseButton button)

{

mouse_event(((int)button), 0, 0, 0, 0);

}

public static void MouseDown(IntPtr hWnd, MouseButton button,int

x,int y)

{

switch (button)

{

case :

PostMessage(hWnd, WM_LBUTTONDOWN,1 ,32( (x + (y

<< 16))));

break;

case :

PostMessage(hWnd, WM_RBUTTONDOWN, 1, 32((x + (y

<< 16))));

break;

case :

PostMessage(hWnd, WM_MBUTTONDOWN, 1, 32((x + (y

<< 16))));

break;

}

}

///

/// Let a mouse button up

///

///

public static void MouseUp(MouseButton button)

{

mouse_event(((int)button) * 2, 0, 0, 0, 0);

}

public static void MouseUp(IntPtr hWnd, MouseButton button, int x,

int y)

{

switch (button)

{

case :

PostMessage(hWnd, WM_LBUTTONUP, 0, 32((x + (y <<

16))));

break;

case :

PostMessage(hWnd, WM_RBUTTONUP, 0, 32((x + (y <<

16))));

break;

case :

PostMessage(hWnd, WM_MBUTTONUP, 0, 32((x + (y <<

16))));

break;

}

}

///

/// Click a mouse button (down then up)

///

///

public static void Click(MouseButton button)

{

MouseDown(button);

MouseUp(button);

}

public static void Click(IntPtr hWnd, MouseButton button,int x,int y)

{

MouseDown(hWnd, button, x, y);

MouseUp(hWnd, button, x, y);

}

///

/// Double click a mouse button (down then up twice)

///

///

public static void DoubleClick(MouseButton button)

{

Click(button);

Click(button);

}

public static void DoubleClick(IntPtr hWnd, MouseButton button, int

x, int

y)

{

Click(hWnd, button, x, y);

Click(hWnd, button, x, y);

}

///

/// Roll the mouse wheel. Delta of 120 wheels up once normally, -120

wheels

down once normally

///

///

public static void MouseWheel(int delta)

{

mouse_event(MOUSEEVENTF_WHEEL, 0, 0, delta, 0);

}

///

/// Show a hidden current on currently application

///

public static void Show()

{

ShowCursor(true);

}

///

/// Hide mouse cursor only on current application's forms

///

public static void Hide()

{

ShowCursor(false);

}

///

/// Press a mouse button down

///

///

public static void MouseDown(MouseButtons button)

{

switch (button)

{

case :

MouseDown();

break;

case :

MouseDown();

break;

case :

MouseDown();

break;

}

}

///

/// Let a mouse button up

///

///

public static void MouseUp(MouseButtons button)

{

switch (button)

{

case :

MouseUp();

break;

case :

MouseUp();

break;

case :

MouseUp();

break;

}

}

///

/// Click a mouse button (down then up)

///

///

public static void Click(MouseButtons button)

{

switch (button)

{

case :

Click();

break;

case :

Click();

break;

case :

Click();

break;

}

}

///

/// Double click a mouse button (down then up twice)

///

///

public static void DoubleClick(MouseButtons button)

{

switch (button)

{

case :

DoubleClick();

break;

case :

DoubleClick();

break;

case :

DoubleClick();

break;

}

}

#endregion

}

}