1.問題思路
想做一個能夠擷取滑鼠的螢幕坐标的程式,最初使用Form的MouseMove事件響應函數,接着問題出現了。由于Form的所有滑鼠事件響應函數要求滑鼠必須在Form窗體内操作才能觸發,而我的要求是滑鼠在螢幕上任何位置移動都能顯示滑鼠的坐标。是以隻能另外想别的辦法了。 最後借助Timer(計時器)可以很好地解決問題。使用MousePosition擷取螢幕坐标,并借助Timer來動态更新顯示滑鼠坐标。滑鼠所在位置的螢幕顔色則通過win32函數來實作。
2.程式示範:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICNxIDOycTNwEjMyATM0EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
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 + ")";
}
}