Problemstellung:
Bestimmen einer Methode zum Erfassen der Farbe eines bestimmten Bildschirmpixel und Auslösen eines Ereignisses basierend auf dem Erkannten Farbe.
Lösung:
Die effizienteste Technik besteht darin, das Pixel an der Cursorposition zu erfassen und so die Kompatibilität auf mehreren Monitoren sicherzustellen.
Detaillierte Implementierung:
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); } } }
Abfrage nach Pixelfarbe Änderung:
Um eine bestimmte Pixelfarbe kontinuierlich zu überwachen, können Sie die folgende Funktion innerhalb einer Schleife oder eines Threads nutzen:
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(); } }
Fazit:
Dieser Ansatz ermöglicht eine genaue Erkennung der Bildschirmpixelfarbe und ermöglicht eine zuverlässige Ereignisauslösung basierend auf der Farbe.
Das obige ist der detaillierte Inhalt vonWie kann ich Farbveränderungen der Bildschirmpixel erkennen und Ereignisse auslösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!