C#制作的屏幕取色器

主要原理就是将屏幕全图抓屏,然后获取鼠标当前位置,取色。直接看代码:
  1  using  System;
  2  using  System.Collections.Generic;
  3  using  System.ComponentModel;
  4  using  System.Data;
  5  using  System.Drawing;
  6  using  System.Linq;
  7  using  System.Text;
  8  using  System.Windows.Forms;
  9  using  System.Runtime.InteropServices;
 10 
 11  namespace  GetScrColor
 12  {
 13       public   partial   class  Form1 : Form
 14      {
 15           public  Form1()
 16          {
 17              InitializeComponent();
 18          }
 19 
 20           private   bool  flag  =   false ;
 21 
 22           public   struct  POINTAPI
 23          {
 24               public   uint  x;
 25               public   uint  y;
 26          }
 27 
 28           public   class  WinInfo
 29          {
 30              [DllImport( " user32.dll " )]
 31               public   static   extern   uint  WindowFromPoint
 32              (
 33                   uint  x_point,
 34                   uint  y_point
 35              );
 36 
 37              [DllImport( " user32.dll " )]
 38               public   static   extern   bool  GetCursorPos
 39              (
 40                   ref  POINTAPI p
 41              );
 42 
 43              [DllImport( " user32.dll " )]
 44               public   static   extern   uint  ScreenToClient
 45              (
 46                   uint  hwnd,
 47                   ref  POINTAPI p
 48              );
 49 
 50              [DllImport( " user32.dll " )]
 51               public   static   extern   uint  GetDC
 52              (
 53                   uint  hwnd
 54              );
 55 
 56              [DllImport( " gdi32.dll " )]
 57               public   static   extern   uint  GetPixel
 58              (
 59                   uint  hDC,
 60                   uint  x,
 61                   uint  y
 62              );
 63 
 64              [DllImport( " user32.dll " )]
 65               public   static   extern   uint  ReleaseDC
 66              (
 67                   uint  hwnd,
 68                   uint  hdc
 69              );
 70          }
 71 
 72           private   void  Form1_Load( object  sender, EventArgs e)
 73          {
 74              InitPos( 0 , 0 , false );
 75              Screen s  =  Screen.PrimaryScreen;
 76              Rectangle r  =  s.Bounds;
 77               int  iWidth  =  r.Width;
 78               int  iHeight  =  r.Height;
 79               // 创建一个和屏幕一样大的bitmap
 80              Image img  =   new  Bitmap(iWidth,iHeight);
 81               // 从一个继承自image类的对象中创建Graphics对象
 82              Graphics g  =  Graphics.FromImage(img);
 83               // 抓取全屏幕
 84              g.CopyFromScreen( new  Point( 0 0 ),  new  Point( 0 0 ),  new  Size(iWidth, iHeight));
 85               this .WindowState  =  FormWindowState.Maximized;
 86               this .BackgroundImage  =  img;
 87          }
 88 
 89           private   void  Form1_MouseMove( object  sender, MouseEventArgs e)
 90          {
 91              POINTAPI Papi  =   new  POINTAPI();
 92              WinInfo.GetCursorPos( ref  Papi);
 93               uint  v_hwnd  =  WinInfo.WindowFromPoint(Papi.x, Papi.y);
 94               uint  v_DC  =  WinInfo.GetDC(v_hwnd);
 95              WinInfo.ScreenToClient(v_hwnd,  ref  Papi);
 96               uint  v_Color  =  WinInfo.GetPixel(v_DC, Papi.x, Papi.y);
 97 
 98               uint  v_Red, v_Green, v_Blue;
 99              v_Red  =  v_Color  &   0xff ;
100              v_Green  =  (v_Color  &   0xff00 /   256 ;
101              v_Blue  =  (v_Color  &   0xff0000 /   65536 ;
102 
103               this .txtRGB.Text  = " # " + v_Red.ToString( " x " ).PadLeft( 2 ' 0 ' +  v_Green.ToString( " x " ).PadLeft( 2 ' 0 ' +  v_Blue.ToString( " x " ).PadLeft( 2 ' 0 ' );
104               this .txtRGBDesc.Text  =  v_Red.ToString( " d " +   "   "   +  v_Green.ToString( " d " +   "   "   +  v_Blue.ToString( " d " );
105               this .txtShow.BackColor  =  Color.FromArgb(( int )v_Red, ( int )v_Green, ( int )v_Blue);
106              WinInfo.ReleaseDC(v_hwnd, v_DC);
107          }
108 
109           private   void  InitPos( int  x, int  y, bool  bFlag)
110          {
111              panel1.Left  =  x;
112              panel1.Top  =  y;
113              flag  =  bFlag;
114          }
115 
116 
117           private   void  panel1_MouseEnter( object  sender, EventArgs e)
118          {
119               if  ( ! flag)
120              {
121                  InitPos( this .Width  -  panel1.Width,  0 true );
122              }
123               else
124              {
125                  InitPos( 0 0 false );
126              }
127          }
128 
129           private   void  Form1_KeyDown( object  sender, KeyEventArgs e)
130          {
131               if  (e.KeyCode  ==  Keys.Escape)
132              {
133                   this .Close();
134              }
135          }
136 
137      }
138  }
139 

对http://blog.csdn.net/lijgame/archive/2006/12/18/1447921.aspx有参照

你可能感兴趣的:(C#制作的屏幕取色器)