namespace WinFormsApp_ImitateMouseAndKeyboard{ /// <summary> /// Mouse 的摘要说明。 /// </summary>public class Mouse
{internal const byte SM_MOUSEPRESENT = 19;
internal const byte SM_CMOUSEBUTTONS = 43;
internal const byte SM_MOUSEWHEELPRESENT = 75;
public const int MOUSEEVENTF_LEFTDOWN = 0x2;
public const int MOUSEEVENTF_LEFTUP = 0x4;
public const int MOUSEEVENTF_MIDDLEDOWN = 0x20;
public const int MOUSEEVENTF_MIDDLEUP = 0x40;
public const int MOUSEEVENTF_MOVE = 0x1;
public const int MOUSEEVENTF_RIGHTDOWN = 0x8;
public const int MOUSEEVENTF_RIGHTUP = 0x10;
public struct POINTAPI
{public int x;
public int y;
}
public struct RECT
{public int left;
public int top;
public int right;
public int bottom;
}
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SwapMouseButton")]
public extern static int SwapMouseButton(int bSwap);
[System.Runtime.InteropServices.DllImport("user32", EntryPoint = "ClipCursor")]
public extern static int ClipCursor(ref RECT lpRect);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetCursorPos")]
public extern static int GetCursorPos(ref POINTAPI lpPoint);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "ShowCursor")]
public extern static bool ShowCursor(bool bShow);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "EnableWindow")]
public extern static int EnableWindow(int hwnd, int fEnable);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetWindowRect")]
public extern static int GetWindowRect(int hwnd, ref RECT lpRect);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetCursorPos")]
public extern static int SetCursorPos(int x, int y);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetSystemMetrics")]
public extern static int GetSystemMetrics(int nIndex);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetDoubleClickTime")]
public extern static int SetDoubleClickTime(int wCount);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetDoubleClickTime")]
public extern static int GetDoubleClickTime();
[System.Runtime.InteropServices.DllImport("kernel32.DLL", EntryPoint = "Sleep")]
public extern static void Sleep(int dwMilliseconds);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "mouse_event")]
public static extern void mouse_event(
int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
//得到鼠标相对与全屏的坐标,不是相对与你的Form的,且与你的分辨率有关系public static int FullScreenPosition_X
{get
{ POINTAPI _POINTAPI = new POINTAPI(); GetCursorPos(ref _POINTAPI); return _POINTAPI.x;}
}
public static int FullScreenPosition_Y
{get
{ POINTAPI _POINTAPI = new POINTAPI(); GetCursorPos(ref _POINTAPI); return _POINTAPI.y;}
}
// 隐藏 显示 鼠标public static void Hide()
{ ShowCursor(false);}
public static void Show()
{ ShowCursor(true);}
// 将鼠标锁定在你的Form里 不过你得将你的Form先锁了,Form Resize 就失效了public static void Lock(System.Windows.Forms.Form ObjectForm)
{ RECT _FormRect = new RECT(); GetWindowRect(ObjectForm.Handle.ToInt32(), ref _FormRect); ClipCursor(ref _FormRect);}
public static void UnLock()
{ RECT _ScreenRect = new RECT();_ScreenRect.top = 0;
_ScreenRect.left = 0;
_ScreenRect.bottom = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Bottom;
_ScreenRect.right = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Right;
ClipCursor(ref _ScreenRect);}
// 鼠标失效,不过失效的好像不只是鼠标,小心哦public static void Disable(System.Windows.Forms.Form ObjectForm)
{EnableWindow(ObjectForm.Handle.ToInt32(), 0);
}
public static void Enable(System.Windows.Forms.Form ObjectForm)
{EnableWindow(ObjectForm.Handle.ToInt32(), 1);
}
// 鼠标自己移动 很想动画哦 参数是2个控件的handle // 看这个方法前,先用凉水擦把脸。。。 反正我写的时候 头晕public static void Move(int From_Handle_ToInt32, int To_Handle_ToInt32)
{ RECT rectFrom = new RECT(); RECT rectTo = new RECT(); int i; GetWindowRect(From_Handle_ToInt32, ref rectFrom); GetWindowRect(To_Handle_ToInt32, ref rectTo); if ((rectFrom.left + rectFrom.right) / 2 - (rectTo.left + rectTo.right) / 2 > 0) { for (i = (rectFrom.left + rectFrom.right) / 2; i >= (rectTo.left + rectTo.right) / 2; i--) {SetCursorPos(i, (rectFrom.top + rectFrom.bottom) / 2);
Sleep(1);
}
}
else { for (i = (rectFrom.left + rectFrom.right) / 2; i <= (rectTo.left + rectTo.right) / 2; i++) {SetCursorPos(i, (rectFrom.top + rectFrom.bottom) / 2);
Sleep(1);
}
}
if ((rectFrom.top + rectFrom.bottom) / 2 - (rectTo.top + rectTo.bottom) / 2 > 0) { for (i = (rectFrom.top + rectFrom.bottom) / 2; i >= (rectTo.top + rectTo.bottom) / 2; i--) {SetCursorPos((rectTo.left + rectTo.right) / 2, i);
Sleep(1);
}
}
else { for (i = (rectFrom.top + rectFrom.bottom) / 2; i <= (rectTo.top + rectTo.bottom) / 2; i++) {SetCursorPos((rectTo.left + rectTo.right) / 2, i);
Sleep(1);
}
}
}
// 得到你的鼠标类型public static string Type
{get
{ if (GetSystemMetrics(SM_MOUSEPRESENT) == 0) {return "本计算机尚未安装鼠标";
}
else { if (GetSystemMetrics(SM_MOUSEWHEELPRESENT) != 0) {return GetSystemMetrics(SM_CMOUSEBUTTONS) + "键滚轮鼠标";
}
else {return GetSystemMetrics(SM_CMOUSEBUTTONS) + "键鼠标";
}
}
}
}
// 设置鼠标双击时间public static void DoubleClickTime_Set(int MouseDoubleClickTime)
{SetDoubleClickTime(MouseDoubleClickTime);
}
public static string DoubleClickTime_Get()
{ return GetDoubleClickTime().ToString();}
// 设置鼠标默认主键 我是没有见过谁左手用鼠标public static void DefaultRightButton()
{SwapMouseButton(1);
}
public static void DefaultLeftButton()
{SwapMouseButton(0);
}
private static void LeftDown()
{mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
}
private static void LeftUp()
{mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
public static void LeftClick()
{LeftDown();
LeftUp();
}
private static void MiddleDown()
{mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0);
}
private static void MiddleUp()
{mouse_event(MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0);
}
public static void MiddleClick()
{MiddleDown();
MiddleUp();
}
private static void RightDown()
{mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
}
private static void RightUp()
{mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
}
public static void RightClick()
{RightDown();
RightUp();
}
}
}
using System.Runtime.InteropServices;namespace WinFormsApp_ImitateMouseAndKeyboard{ /// <summary> /// Screen 的摘要说明。 /// </summary>public class Screen
{public enum DMDO
{DEFAULT = 0,
D90 = 1,
D180 = 2,
D270 = 3
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
struct DEVMODE {public const int DM_DISPLAYFREQUENCY = 0x400000;
public const int DM_PELSWIDTH = 0x80000;
public const int DM_PELSHEIGHT = 0x100000;
private const int CCHDEVICENAME = 32;
private const int CCHFORMNAME = 32;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHDEVICENAME)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public int dmPositionX;
public int dmPositionY;
public DMDO dmDisplayOrientation;public int dmDisplayFixedOutput;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHFORMNAME)]
public string dmFormName;
public short dmLogPixels;
public int dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
public int dmICMMethod;
public int dmICMIntent;
public int dmMediaType;
public int dmDitherType;
public int dmReserved1;
public int dmReserved2;
public int dmPanningWidth;
public int dmPanningHeight;
}
[DllImport("user32.dll", CharSet = CharSet.Auto)] //static extern int ChangeDisplaySettings( DEVMODE lpDevMode, int dwFlags);static extern int ChangeDisplaySettings([In] ref DEVMODE lpDevMode, int dwFlags);
public Screen() { // // TODO: 在此处添加构造函数逻辑 //}
public static void changeScree(int W, int H, int F, out long RetVal)
{RetVal = 0;
DEVMODE dm = new DEVMODE();dm.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
dm.dmPelsWidth = W;
dm.dmPelsHeight = H;
dm.dmDisplayFrequency = F;
dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT | DEVMODE.DM_DISPLAYFREQUENCY;
RetVal = ChangeDisplaySettings(ref dm, 0);}
}
}
namespace WinFormsApp_ImitateMouseAndKeyboard{ /// <summary> /// Window 的摘要说明。 /// </summary>public class Windows
{[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(
int hwnd, int wMsg, int wParam, int lParam);
}
}
//模拟鼠标/键盘:
//调用:
Mouse.SetCursorPos(MousePosition.X, MousePosition.Y);//(100, 100);
Mouse.LeftClick();//左键
Mouse.RightClick();//右键
//键盘操作可以用:
// SendKeys.SendWait();
//想了解更多,请查询SystemWindowsFormsSendKeysClass相关信息
//如:
//关闭显示器可以用:
//Windows.SendMessage(this.Handle.ToInt32(),0x112,0xF170,2);
//打开
//Windows.SendMessage(this.Handle.ToInt32(),0x112,0xF170,-1);
浙公网安备 33010602011771号