zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    删除表空间的时候遇到的问题:ORA-02429: 无法删除用于强制唯一/主键的索引
    删除
    Activity中使用getSystemService获得系统服务
    用多线程实现反应灵敏的界面(Java)
    用数组实现3个栈之固定分割(Java)
    Android小知识点20条
    Android数据库中数据文件的导出与查看
    MFC中使用CSplitterWnd分割窗口后设置视图大小的问题
    MFC中,通过preCreateWindow函数无法设置视图样式(包括窗口的大小)
    6:Node.js 路由
  • 原文地址:https://www.cnblogs.com/yezuhui/p/6836362.html
Copyright © 2011-2022 走看看