C# 获取鼠标在屏幕中的颜色和位置

1.问题思路      

       想做一个能够获取鼠标的屏幕坐标的程序,最初使用Form的MouseMove事件响应函数,接着问题出现了。由于Form的所有鼠标事件响应函数要求鼠标必须在Form窗体内操作才能触发,而我的要求是鼠标在屏幕上任何位置移动都能显示鼠标的坐标。因此只能另外想别的办法了。
       最后借助Timer(计时器)可以很好地解决问题。使用MousePosition获取屏幕坐标,并借助Timer来动态更新显示鼠标坐标。鼠标所在位置的屏幕颜色则通过win32函数来实现。

2.程序演示:


3.CSharp代码:

    public Form1()
        {
            InitializeComponent();
        }

        [DllImport("user32.dll")]//取设备场景 
        private static extern IntPtr GetDC(IntPtr hwnd);//返回设备场景句柄 
        [DllImport("gdi32.dll")]//取指定点颜色 
        private static extern int GetPixel(IntPtr hdc, Point p);

        private void Form1_Load(object sender, EventArgs e)
        {
            Timer tim = new Timer();
            tim.Interval = 1;
            tim.Tick += tim_Tick;
            tim.Start();
        }

        private void tim_Tick(object sender, EventArgs e)
        {
            Point p = new Point(MousePosition.X, MousePosition.Y);//取置顶点坐标 
            IntPtr hdc = GetDC(new IntPtr(0));//取到设备场景(0就是全屏的设备场景) 
            int c = GetPixel(hdc, p);//取指定点颜色 
            int r = (c & 0xFF);//转换R 
            int g = (c & 0xFF00) / 256;//转换G 
            int b = (c & 0xFF0000) / 65536;//转换B 
            pictureBox1.BackColor = Color.FromArgb(r, g, b);
            this.Text = "(" + p.X + "," + p.Y + ")";
        }
    }


展开阅读全文

没有更多推荐了,返回首页