Beispiel #1
0
        public static bool ImageSearchCSharp([MarshalAs(UnmanagedType.LPStr)] string imagePath, Rectangle window)
        {
            var screenCap = new CaptureImage().CaptureFromScreen(window);

            var searchImage = new Bitmap(imagePath);

            var result = IsInCapture(searchImage, screenCap);

            return(result);
        }
Beispiel #2
0
        public string[] ImageSearchAutoIt([MarshalAs(UnmanagedType.LPStr)] string imgPath, Rectangle window, string tolerance = "20")
        {
            var autoitImagePath = "*" + tolerance + " " + imgPath;

            var result = ImageSearch(window.X, window.Y, window.Width, window.Height, autoitImagePath);
            var res    = Marshal.PtrToStringAnsi(result);

            if (res[0] == '0')
            {
                return(null);
            }

            var data = res.Split('|');

            int.TryParse(data[1], out var x);
            int.TryParse(data[2], out var y);


            //TODO: Add "if debug" here and in other IS functions
            var absWindowX = Math.Abs(window.X);
            var absWindowY = Math.Abs(window.Y);

            var resX = Math.Abs(x);
            var resY = Math.Abs(y);

            int testX;

            if (resX > absWindowX)
            {
                testX = resX - absWindowX;
            }
            else
            {
                testX = absWindowX - resX;
            }
            var testY = resY - absWindowY;

            var screenCap = new CaptureImage().CaptureFromScreen(window);

            var source      = new Image <Bgr, byte>(screenCap);
            var template    = new Image <Bgr, byte>(imgPath);
            var imageToShow = source.Copy();

            var match = new Rectangle(new Point(testX, testY), template.Size);

            imageToShow.Draw(match, new Bgr(Color.Red), 2);

            DebugForm.DebugPictureBox.Invoke(
                new MethodInvoker(delegate { DebugForm.DebugPictureBox.Image = imageToShow.Bitmap; }));

            return(data);
        }
Beispiel #3
0
        public static Bitmap CaptureDWM()
        {
            if (thumb != IntPtr.Zero)
            {
                DwmUnregisterThumbnail(thumb);
            }

            int windowWidth;

            if (DebugForm.WindowRect.X > DebugForm.WindowRect.Width)
            {
                windowWidth = DebugForm.WindowRect.X - DebugForm.WindowRect.Width;
            }
            else
            {
                windowWidth = DebugForm.WindowRect.Width - DebugForm.WindowRect.X;
            }
            var windowHeight = DebugForm.WindowRect.Height - DebugForm.WindowRect.Y;

            var dwmCaptureForm = new Form
            {
                Text    = "DWM Capture Window",
                Width   = windowWidth + 15,
                Height  = windowHeight + 32,
                Left    = 0,
                Top     = 0,
                TopMost = true
            };

            dwmCaptureForm.Show();

            int i = DwmRegisterThumbnail(dwmCaptureForm.Handle, DebugForm.WindowHandle, out thumb);

            if (i == 0)
            {
                DWMFunctions.UpdateThumb();
            }

            DebugForm.GetWindowRect(dwmCaptureForm.Handle, out var dwmCapRectangle);

            var dwmCapture = new CaptureImage().CaptureFromScreen(dwmCapRectangle);

            DebugForm.DebugPictureBox.Invoke(
                new MethodInvoker(delegate { DebugForm.DebugPictureBox.Image = dwmCapture; }));

            DwmUnregisterThumbnail(thumb);
            dwmCaptureForm.Close();

            return(dwmCapture);
        }