Pernyataan Masalah:
Menentukan kaedah untuk menangkap warna sesuatu piksel skrin dan mencetuskan peristiwa berdasarkan yang dikesan warna.
Penyelesaian:
Teknik paling cekap melibatkan penangkapan piksel di lokasi kursor, memastikan keserasian merentas berbilang monitor.
Pelaksanaan Terperinci:
using System; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; using System.Windows.Forms; namespace ScreenPixelReader { public partial class Form1 : Form { [DllImport("user32.dll")] static extern bool GetCursorPos(ref Point lpPoint); [DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)] public static extern int BitBlt(IntPtr hDC, int x, int y, int nWidth, int nHeight, IntPtr hSrcDC, int xSrc, int ySrc, int dwRop); public Form1() { InitializeComponent(); } private void MouseMoveTimer_Tick(object sender, EventArgs e) { Point cursor = new Point(); GetCursorPos(ref cursor); var c = GetColorAt(cursor); this.BackColor = c; if (c.R == c.G && c.G < 64 && c.B > 128) { MessageBox.Show("Blue"); } } Bitmap screenPixel = new Bitmap(1, 1, PixelFormat.Format32bppArgb); public Color GetColorAt(Point location) { // Create off-screen bitmaps for capturing screen pixels using (Graphics gdest = Graphics.FromImage(screenPixel)) using (Graphics gsrc = Graphics.FromHwnd(IntPtr.Zero)) { IntPtr hSrcDC = gsrc.GetHdc(); IntPtr hDC = gdest.GetHdc(); int retval = BitBlt(hDC, 0, 0, 1, 1, hSrcDC, location.X, location.Y, (int)CopyPixelOperation.SourceCopy); gdest.ReleaseHdc(); gsrc.ReleaseHdc(); } // Return the captured pixel color return screenPixel.GetPixel(0, 0); } } }
Tinjauan untuk Perubahan Warna Piksel:
Untuk terus memantau warna piksel tertentu, anda boleh menggunakan fungsi berikut dalam gelung atau benang:
private void PollPixel(Point location, Color color) { while (true) { var c = GetColorAt(location); if (c.R == color.R && c.G == color.G && c.B == color.B) { DoAction(); return; } Thread.Sleep(); } }
Kesimpulan:
Pendekatan ini membolehkan pengesanan warna piksel skrin yang tepat dan membolehkan pencetus peristiwa yang boleh dipercayai berdasarkan warna.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Perubahan Warna Piksel Skrin dan Peristiwa Pencetus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!