This TheEyes library makes it easy to read and find images on the screen.
This library was built and tested on Windows 10 (64bit) with .NET Framework 3.5.
The package is available on Nuget: Quellatalo.Nin.TheEyes
(Working together with TheHands library)
/// <summary>
/// A test to have TheHands and TheEyes working together
/// Preparation: Open Microsoft Paint, with full canvas ready
/// This code will:
/// - focus on Paint, demonstrate the recognition
/// - draw something on canvas
/// - duplicate the drawing
/// - once again find all similar drawings on the canvas
/// </summary>
void HandsAndEyesTest()
{
// Look for a window which has "paint" in title and bring it to front
App app = App.GetAppByWindowTitle("paint");
app.ToFront();
using (Brush brush = new SolidBrush(Color.FromArgb(63, Color.Red)))
{
// Highlight the Paint's window area
Area area = new Area(app.GetMainWindowRectangle());
area.Highlight(brush);
Thread.Sleep(2222); // wait, just to observe
Area.ClearHighlight(); // clear the highlight
// Prepare some points to draw in sequence
Point[] points1 = new Point[] // 1st stroke
{
new Point(area.Center.X-10,area.Center.Y-10),
new Point(area.Center.X+10,area.Center.Y-10),
new Point(area.Center.X+10,area.Center.Y+10),
new Point(area.Center.X-10,area.Center.Y+10)
};
Point[] points2 = new Point[] // 2nd stroke
{
new Point(area.Center.X-14,area.Center.Y-14),
new Point(area.Center.X+14,area.Center.Y-14),
new Point(area.Center.X+14,area.Center.Y+14),
new Point(area.Center.X-14,area.Center.Y+14)
};
MouseHandler mouse = new MouseHandler();
KeyboardHandler keyboard = new KeyboardHandler();
mouse.DefaultMouseActionDelay = 111; // set some delay after each mouse action, it's easier to observe
// Draw on Paint's canvas
mouse.LeftDrag(points1);
mouse.LeftDrag(points2);
keyboard.DefaultKeyboardActionDelay = 41; // set some delay after each keyboard action
// Switch to Paint's select mode
keyboard.KeyDown(Keys.LControlKey);
keyboard.KeyTyping(Keys.A);
keyboard.KeyUp(Keys.LControlKey);
keyboard.KeyTyping(Keys.Escape);
// The drawing's area
Area myDrawingArea = new Area(
new Rectangle(
new Point(area.Center.X - 16, area.Center.Y - 16),
new Size(32, 32)));
// In Paint, select the drawing
mouse.LeftDrag(
myDrawingArea.TopLeft,
myDrawingArea.BottomRight);
// Make a copy of the drawing
keyboard.KeyDown(Keys.LControlKey);
keyboard.KeyTyping(Keys.C);
keyboard.KeyTyping(Keys.V);
keyboard.KeyUp(Keys.LControlKey);
keyboard.KeyTyping(Keys.Escape);
// Find all the same drawings on Paint's window
// (with 75% threshold by using default Pattern constructor)
using (ImagePattern pattern = new ImagePattern(myDrawingArea.GetDisplayingImage()))
{
List<Match> matches = area.FindAll(pattern);
foreach (Match match in matches)
{
area.SubArea(match.Rectangle).Highlight(brush);
}
Thread.Sleep(2222);
Area.ClearHighlight();
}
}
}
MIT
It's free. El Psy Congroo!