using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; namespace AIStudio.Wpf.DiagramDesigner { /// /// 获取当前光标处颜色,win8下wpf测试成功 /// public class ColorPickerManager { /// /// /// /// 鼠标相对于显示器的坐标X /// 鼠标相对于显示器的坐标Y /// //public static System.Drawing.Color GetColor(int x, int y) //{ // IntPtr hdc = GetDC(IntPtr.Zero); // uint pixel = GetPixel(hdc, x, y); // ReleaseDC(IntPtr.Zero, hdc); // System.Drawing.Color color = System.Drawing.Color.FromArgb((int)(pixel & 0x000000FF), (int)(pixel & 0x0000FF00) >> 8, (int)(pixel & 0x00FF0000) >> 16); // return color; //} /// /// /// /// 鼠标相对于显示器的坐标X /// 鼠标相对于显示器的坐标Y /// public static System.Windows.Media.Color GetColor(int x, int y) { IntPtr hdc = GetDC(IntPtr.Zero); uint pixel = GetPixel(hdc, x, y); ReleaseDC(IntPtr.Zero, hdc); System.Windows.Media.Color color = System.Windows.Media.Color.FromRgb((byte)(pixel & 0x000000FF), (byte)((pixel & 0x0000FF00) >> 8), (byte)((pixel & 0x00FF0000) >> 16)); return color; } [DllImport("gdi32.dll")] private static extern bool BitBlt( IntPtr hdcDest, // 目标设备的句柄 int nXDest, // 目标对象的左上角的X坐标 int nYDest, // 目标对象的左上角的X坐标 int nWidth, // 目标对象的矩形的宽度 int nHeight, // 目标对象的矩形的长度 IntPtr hdcSrc, // 源设备的句柄 int nXSrc, // 源对象的左上角的X坐标 int nYSrc, // 源对象的左上角的X坐标 int dwRop // 光栅的操作值 ); [DllImport("gdi32.dll")] private static extern IntPtr CreateDC( string lpszDriver, // 驱动名称 string lpszDevice, // 设备名称 string lpszOutput, // 无用,可以设定位"NULL" IntPtr lpInitData // 任意的打印机数据 ); /// /// 获取指定窗口的设备场景 /// /// 将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC /// 指定窗口的设备场景句柄,出错则为0 [DllImport("user32.dll")] private static extern IntPtr GetDC(IntPtr hwnd); /// /// 释放由调用GetDC函数获取的指定设备场景 /// /// 要释放的设备场景相关的窗口句柄 /// 要释放的设备场景句柄 /// 执行成功为1,否则为0 [DllImport("user32.dll")] private static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc); /// /// 在指定的设备场景中取得一个像素的RGB值 /// /// 一个设备场景的句柄 /// 逻辑坐标中要检查的横坐标 /// 逻辑坐标中要检查的纵坐标 /// 指定点的颜色 [DllImport("gdi32.dll")] private static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos); } }