目录
实践过程
效果
代码
public partial class Form : Form
{
public Form()
{
InitializeComponent();
}
#region 定义快捷键
[DllImport("user.dll", SetLastError = true)]
public static extern bool RegisterHotKey(
IntPtr hWnd,
int id,
KeyModifiers fsModifiers,
Keys vk
);
[DllImport("user.dll", SetLastError = true)]
public static extern bool UnregisterHotKey(
IntPtr hWnd,
int id
);
[Flags()]
public enum KeyModifiers
{
None =,
Alt =,
Ctrl =,
Shift =,
WindowsKey =
}
#endregion
#region 获取鼠标像素的RGB
[DllImport("gdi.dll")]
static public extern uint GetPixel(IntPtr hDC, int XPos, int YPos);
[DllImport("gdi.dll")]
static public extern IntPtr CreateDC(string driverName, string deviceName, string output, IntPtr lpinitData);
[DllImport("gdi.dll")]
static public extern bool DeleteDC(IntPtr DC);
static public byte GetRValue(uint color)
{
return (byte)color;
}
static public byte GetGValue(uint color)
{
return ((byte)(((short)(color)) >>));
}
static public byte GetBValue(uint color)
{
return ((byte)((color) >>));
}
static public byte GetAValue(uint color)
{
return ((byte)((color) >>));
}
public Color GetColor(Point screenPoint)
{
IntPtr displayDC = CreateDC("DISPLAY", null, null, IntPtr.Zero);
uint colorref = GetPixel(displayDC, screenPoint.X, screenPoint.Y);
DeleteDC(displayDC);
byte Red = GetRValue(colorref);
byte Green = GetGValue(colorref);
byte Blue = GetBValue(colorref);
return Color.FromArgb(Red, Green, Blue);
}
#endregion
int screenWidth;
int screenHeight;
int mx;
int my;
const int imgWidth =;
const int imgHeight =;
private void Form_Load(object sender, EventArgs e)
{
this.Location = new Point(,0);
screenWidth = Screen.PrimaryScreen.WorkingArea.Width;
screenHeight = Screen.PrimaryScreen.WorkingArea.Height;
this.TopMost = true;
}
private void timer_Tick(object sender, EventArgs e)
{
RegisterHotKey(Handle,, KeyModifiers.None, Keys.Escape);
mx = Control.MousePosition.X;
my = Control.MousePosition.Y;
lblmPos.Text="("+mx.ToString()+","+my.ToString()+")";
Point pt = new Point(mx,my);
Color cl = GetColor(pt);
lblRGB.Text = "(" + cl.R.ToString() + "," + cl.G.ToString() + "," + cl.B + ")";
if (mx <= this.Width&&my<=this.Height)
{
this.Location = new Point(screenWidth-this.Width,);
}
if (mx >= screenWidth - this.Width&&my<=this.Height)
{
this.Location = new Point(,0);
}
Bitmap bt = new Bitmap(imgWidth/,imgHeight/2);
Graphics g = Graphics.FromImage(bt);
g.CopyFromScreen(new Point(Cursor.Position.X-imgWidth/,Cursor.Position.Y-imgHeight/4),new Point(0,0),new Size(imgWidth/2,imgHeight/2));
IntPtr dc = g.GetHdc();
g.ReleaseHdc(dc);
pictureBox.Image = (Image)bt;
}
protected override void WndProc(ref Message m)
{
const int WM_HOTKEY =x0312;
switch (m.Msg)
{
case WM_HOTKEY:
switch (m.WParam.ToInt())
{
case:
Application.Exit();
break;
}
break;
}
base.WndProc(ref m);
}
private void Form_FormClosed(object sender, FormClosedEventArgs e)
{
UnregisterHotKey(Handle,);
}
private void pictureBox_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawLine(new Pen(Color.Red), new PointF(pictureBox.Width / 2, 0), new PointF(pictureBox1.Width / 2,pictureBox1.Height));
g.DrawLine(new Pen(Color.Red,), new PointF(0, pictureBox1.Height / 2), new PointF(pictureBox1.Width, pictureBox1.Height/2));
}
}
partial class Form
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.timer = new System.Windows.Forms.Timer(this.components);
this.label = new System.Windows.Forms.Label();
this.lblmPos = new System.Windows.Forms.Label();
this.label = new System.Windows.Forms.Label();
this.label = new System.Windows.Forms.Label();
this.lblRGB = new System.Windows.Forms.Label();
this.pictureBox = new System.Windows.Forms.PictureBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
this.SuspendLayout();
this.timer.Enabled = true;
this.timer.Tick += new System.EventHandler(this.timer1_Tick);
this.label.AutoSize = true;
this.label.BackColor = System.Drawing.Color.Transparent;
this.label.ForeColor = System.Drawing.Color.Black;
this.label.Location = new System.Drawing.Point(12, 122);
this.label.Name = "label2";
this.label.Size = new System.Drawing.Size(65, 12);
this.label.TabIndex = 2;
this.label.Text = "鼠标位置:";
this.lblmPos.AutoSize = true;
this.lblmPos.BackColor = System.Drawing.Color.Transparent;
this.lblmPos.ForeColor = System.Drawing.Color.Black;
this.lblmPos.Location = new System.Drawing.Point(, 122);
this.lblmPos.Name = "lblmPos";
this.lblmPos.Size = new System.Drawing.Size(, 12);
this.lblmPos.TabIndex =;
this.lblmPos.Text = "label";
this.label.AutoSize = true;
this.label.BackColor = System.Drawing.Color.Transparent;
this.label.ForeColor = System.Drawing.Color.Black;
this.label.Location = new System.Drawing.Point(10, 47);
this.label.Name = "label3";
this.label.Size = new System.Drawing.Size(125, 12);
this.label.TabIndex = 5;
this.label.Text = "⊙ 当前像素的RGB值:";
this.label.AutoSize = true;
this.label.BackColor = System.Drawing.Color.Transparent;
this.label.ForeColor = System.Drawing.Color.Black;
this.label.Location = new System.Drawing.Point(10, 73);
this.label.Name = "label4";
this.label.Size = new System.Drawing.Size(125, 12);
this.label.TabIndex = 6;
this.label.Text = "⊙ 按ESC键关闭放大镜";
this.lblRGB.AutoSize = true;
this.lblRGB.BackColor = System.Drawing.Color.Transparent;
this.lblRGB.ForeColor = System.Drawing.Color.Black;
this.lblRGB.Location = new System.Drawing.Point(, 47);
this.lblRGB.Name = "lblRGB";
this.lblRGB.Size = new System.Drawing.Size(, 12);
this.lblRGB.TabIndex =;
this.lblRGB.Text = "label";
this.pictureBox.BackColor = System.Drawing.Color.White;
this.pictureBox.Location = new System.Drawing.Point(3, 146);
this.pictureBox.Name = "pictureBox1";
this.pictureBox.Size = new System.Drawing.Size(234, 134);
this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pictureBox.TabIndex = 8;
this.pictureBox.TabStop = false;
this.pictureBox.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);
this.AutoScaleDimensions = new System.Drawing.SizeF(F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackgroundImage = global::ScreenBlowupGlass.Properties.Resources.bg;
this.ClientSize = new System.Drawing.Size(, 284);
this.Controls.Add(this.pictureBox);
this.Controls.Add(this.lblRGB);
this.Controls.Add(this.label);
this.Controls.Add(this.label);
this.Controls.Add(this.lblmPos);
this.Controls.Add(this.label);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Form";
this.Text = "屏幕放大镜";
this.Load += new System.EventHandler(this.Form_Load);
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form_FormClosed);
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Timer timer;
private System.Windows.Forms.Label label;
private System.Windows.Forms.Label lblmPos;
private System.Windows.Forms.Label label;
private System.Windows.Forms.Label label;
private System.Windows.Forms.Label lblRGB;
private System.Windows.Forms.PictureBox pictureBox;
}