using System.Runtime.InteropServices; 引用这个是前提啦``····MSDN说明:命名空间提供各种各样支持 COM interop 及平台调用服务的成员。 /// <summary> /// 获取窗体 /// </summary> /// <param name="lpClassName">类名</param> /// <param name="lpWindowName">窗体名</param> /// <returns></returns> [DllImport("user32.dll")] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); /// <summary> /// 激活窗体 /// </summary> /// <returns></returns> [DllImport("user32.dll")] static extern IntPtr GetForegroundWindow(); /// <summary> /// 鼠标事件 /// </summary> /// <param name="flags">事件</param> /// <param name="dx">X坐标</param> /// <param name="dy">Y坐标</param> /// <param name="data">数据</param> /// <param name="extraInfo">接入信息</param> [DllImport("user32.dll")] static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, IntPtr extraInfo); [StructLayout(LayoutKind.Sequential)] struct NativeRECT { public int left; public int top; public int right; public int bottom; } [Flags] enum MouseEventFlag : uint { Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008, RightUp = 0x0010, MiddleDown = 0x0020, MiddleUp = 0x0040, XDown = 0x0080, XUp = 0x0100, Wheel = 0x0800, VirtualDesk = 0x4000, Absolute = 0x8000 } /// <summary> /// 获取指定窗口的设备场景 /// </summary> /// <param name="hwnd">将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC</param> /// <returns>指定窗口的设备场景句柄,出错则为0</returns> [DllImport("user32.dll")] public static extern IntPtr GetDC(IntPtr hwnd); /// <summary> /// 释放由调用GetDC函数获取的指定设备场景 /// </summary> /// <param name="hwnd">要释放的设备场景相关的窗口句柄</param> /// <param name="hdc">要释放的设备场景句柄</param> /// <returns>执行成功为1,否则为0</returns> [DllImport("user32.dll")] public static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc); /// <summary> /// 在指定的设备场景中取得一个像素的RGB值 /// </summary> /// <param name="hdc">一个设备场景的句柄</param> /// <param name="nXPos">逻辑坐标中要检查的横坐标</param> /// <param name="nYPos">逻辑坐标中要检查的纵坐标</param> /// <returns>指定点的颜色</returns> [DllImport("gdi32.dll")] public static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos); [DllImport("user32.dll", EntryPoint = "keybd_event")] public static extern void keybd_event( byte bVk, //虚拟键值 byte bScan,// 一般为0 int dwFlags, //这里是整数类型 0 为按下,2为释放 int dwExtraInfo //这里是整数类型 一般情况下设成为 0 ); const int WM_KEYDOWN = 0x100; const int WM_KEYUP = 0x0101; [DllImport("User32.DLL")] static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); 接着就调用了。,··· 以下是一些简单的Demo 模拟键盘 public static void Send(IntPtr hWnd, Keys key, bool autoUp) { IntPtr wp = (IntPtr)((int)key & 0xff); SendMessage(hWnd, WM_KEYDOWN, wp, IntPtr.Zero); //keybd_event((byte)Keys.D4, 0, 0, 0); //keybd_event((byte)Keys.D4, 0, 2, 0); } 获取颜色 pblic static Color GetColor(IntPtr hWnd,int x,int y) { IntPtr hdc_1 = GetDC(hWnd); uint pixel_1 = GetPixel(hdc_1, x, y); ReleaseDC(IntPtr.Zero, hdc_1); Color _color_1 = Color.FromArgb((int)(pixel_1 & 0x000000FF), (int)(pixel_1 & 0x0000FF00) >> 8, (int)(pixel_1 & 0x00FF0000) >> 16); return Color; } 模拟鼠标 public staitic void SetMouse(IntPtr hWnd,int x,int y) { mouse_event(MouseEventFlag.Move, x, y, 0, hWnd); mouse_event(MouseEventFlag.LeftDown, x, y, 0, hWnd); mouse_event(MouseEventFlag.LeftUp, x, y, 0, hWnd); ...........................................等等 }