天天看點

C# 擷取滑鼠在螢幕中的顔色和位置1.問題思路      2.程式示範:

1.問題思路      

       想做一個能夠擷取滑鼠的螢幕坐标的程式,最初使用Form的MouseMove事件響應函數,接着問題出現了。由于Form的所有滑鼠事件響應函數要求滑鼠必須在Form窗體内操作才能觸發,而我的要求是滑鼠在螢幕上任何位置移動都能顯示滑鼠的坐标。是以隻能另外想别的辦法了。        最後借助Timer(計時器)可以很好地解決問題。使用MousePosition擷取螢幕坐标,并借助Timer來動态更新顯示滑鼠坐标。滑鼠所在位置的螢幕顔色則通過win32函數來實作。

2.程式示範:

C# 擷取滑鼠在螢幕中的顔色和位置1.問題思路      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 + ")";
        }
    }