前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动态获取当前屏幕中光标所在位置的颜色

动态获取当前屏幕中光标所在位置的颜色

作者头像
Java架构师必看
发布2020-10-15 10:32:33
2.7K0
发布2020-10-15 10:32:33
举报
文章被收录于专栏:Java架构师必看Java架构师必看

usingSystem;usingSystem.Drawing;usingSystem.C运维

强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.Drawing.Imaging;

using System.Runtime.InteropServices;

namespace LiBo.ColorPicker

{

/// <summary>

/// Form1 的摘要说明。

/// </summary>

public class Form1 : System.Windows.Forms.Form

{

// 桌面工作区的尺寸

Size workingArea;

// Form 的初始位置和在左下角,右下角的位置

Point formLoc, ptLeftBottom, ptRightBottom;

private System.Windows.Forms.Label lblColor;

private System.Windows.Forms.TextBox txtArgb;

private System.Windows.Forms.Timer tmr;

private System.Windows.Forms.ToolTip tip;

private System.ComponentModel.IContainer components;

public Form1()

{

InitializeComponent();

this.FormBorderStyle = FormBorderStyle.FixedToolWindow;

this.StartPosition = FormStartPosition.CenterScreen;

Rectangle rect = SystemInformation.WorkingArea;

workingArea = new Size(rect.Width, rect.Height);

ptLeftBottom = new Point(0, workingArea.Height - this.Height);

ptRightBottom = new Point(workingArea.Width - this.Width,

workingArea.Height - this.Height);

String tipMsg = "在窗体空白处双击鼠标左键开始取色,按ESC键确定颜色";

tip.SetToolTip(this, tipMsg);

tip.SetToolTip(lblColor, tipMsg);

tip.SetToolTip(txtArgb, tipMsg);

}

/// <summary>

/// 清理所有正在使用的资源。

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

#region Windows Form Designer generated code

/// <summary>

/// 设计器支持所需的方法 - 不要使用代码编辑器修改

/// 此方法的内容。

/// </summary>

private void InitializeComponent()

{

this.components = new System.ComponentModel.Container();

this.lblColor = new System.Windows.Forms.Label();

this.tmr = new System.Windows.Forms.Timer(this.components);

this.txtArgb = new System.Windows.Forms.TextBox();

this.tip = new System.Windows.Forms.ToolTip(this.components);

this.SuspendLayout();

//

// lblColor

//

this.lblColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

this.lblColor.Location = new System.Drawing.Point(8, 8);

this.lblColor.Name = "lblColor";

this.lblColor.TabIndex = 0;

//

// tmr

//

this.tmr.Tick += new System.EventHandler(this.tmr_Tick);

//

// txtArgb

//

this.txtArgb.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

this.txtArgb.Font = new System.Drawing.Font("Arial", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));

this.txtArgb.Location = new System.Drawing.Point(8, 40);

this.txtArgb.Name = "txtArgb";

this.txtArgb.TabIndex = 1;

this.txtArgb.Text = "";

this.txtArgb.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtArgb_KeyPress);

//

// Form1

//

this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);

this.ClientSize = new System.Drawing.Size(115, 70);

this.Controls.Add(this.txtArgb);

this.Controls.Add(this.lblColor);

this.Name = "Form1";

this.Text = "屏幕取色(upto)";

this.DoubleClick += new System.EventHandler(this.Form1_DoubleClick);

this.MouseEnter += new System.EventHandler(this.Form1_MouseEnter);

this.ResumeLayout(false);

}

#endregion

/// <summary>

/// 应用程序的主入口点。

/// </summary>

[STAThread]

static void Main()

{

Application.Run(new Form1());

}

[ 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 // 任意的打印机数据

);

private void Form1_DoubleClick(object sender, EventArgs e)

{

formLoc = this.Location;

this.Location = ptRightBottom;

this.TopMost = true;

tmr.Enabled = true;

}

private void tmr_Tick(object sender, EventArgs e)

{

// 创建显示器的DC

IntPtr hdlDisplay = CreateDC("DISPLAY", null, null, IntPtr.Zero);

// 从指定设备的句柄创建新的 Graphics 对象

Graphics gfxDisplay = Graphics.FromHdc(hdlDisplay);

// 创建只有一个象素大小的 Bitmap 对象

Bitmap bmp = new Bitmap(1, 1, gfxDisplay);

// 从指定 Image 对象创建新的 Graphics 对象

Graphics gfxBmp = Graphics.FromImage(bmp);

// 获得屏幕的句柄

IntPtr hdlScreen = gfxDisplay.GetHdc();

// 获得位图的句柄

IntPtr hdlBmp = gfxBmp.GetHdc();

// 把当前屏幕中鼠标指针所在位置的一个象素拷贝到位图中

BitBlt(hdlBmp, 0, 0, 1, 1, hdlScreen, MousePosition.X, MousePosition.Y, 13369376);

// 释放屏幕句柄

gfxDisplay.ReleaseHdc(hdlScreen);

// 释放位图句柄

gfxBmp.ReleaseHdc(hdlBmp);

lblColor.BackColor = bmp.GetPixel(0, 0); // 获取像素的颜色

txtArgb.Text = "0x" + lblColor.BackColor.ToArgb().ToString("x").ToUpper();

gfxDisplay.Dispose();

gfxBmp.Dispose();

bmp.Dispose(); // 释放 bmp 所使用的资源

}

private void txtArgb_KeyPress(object sender, KeyPressEventArgs e)

{

// 当按下ESC键时,确定所取的颜色ARGB值

// 注意:只有当窗体处于激活状态时才有效

if (e.KeyChar == (char)Keys.Escape)

{

tmr.Enabled = false;

this.Location = formLoc;

this.TopMost = false;

txtArgb.SelectAll();

}

}

private void Form1_MouseEnter(object sender, EventArgs e)

{

if (this.Location == ptLeftBottom) //窗体在左下角

{

this.Location = ptRightBottom;

}

else if (this.Location == ptRightBottom) // 窗体在右下角

{

this.Location = ptLeftBottom;

}

}

}

}  

本文由来源 21aspnet,由 system_mush 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档