屏幕捕获未捕获我的应用程序中的对话框 [英] Screen Capture Not Capturing Dialog Boxes in My application

查看:23
本文介绍了屏幕捕获未捕获我的应用程序中的对话框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个用 WPF 和 WinForms 制作的应用程序 A.我在 WinForms 中编写了另一个用于捕获屏幕的应用程序.我面临的问题是应用程序 A 中出现的对话框没有在屏幕中捕获.整个屏幕都被捕获,包括对话框后面的区域,但对话框没有被捕获.

I have an application A that is made in WPF and WinForms.I have written another Application in WinForms for Capturing Screen. The problem I'm facing is that The dialog boxes that come up in Application A do not captured in the screen. The whole screen gets captured including the area behind the dialog box but the dialog box doesn't get captured.

    public void CaptureScreen(string filepath)
    {

        string[] words = filepath.Split('\\');
        string newFilePath = " ";
        foreach (string word in words)
        {
            if (!(word.Contains(".bmp")))
            {
                newFilePath = newFilePath + word + "//";
            }
            else
            {
                newFilePath = newFilePath + word;
            }


        }

        this.WindowState = FormWindowState.Minimized;


        Screen[] screens;
        screens = Screen.AllScreens;
        int noofscreens = screens.Length, maxwidth = 0, maxheight = 0;
        for (int i = 0; i < noofscreens; i++)
        {
            if (maxwidth < (screens[i].Bounds.X + screens[i].Bounds.Width)) maxwidth = screens[i].Bounds.X + screens[i].Bounds.Width;
            if (maxheight < (screens[i].Bounds.Y + screens[i].Bounds.Height)) maxheight = screens[i].Bounds.Y + screens[i].Bounds.Height;
        }


        var width = maxwidth;
        var height = maxheight;

        Point sourcePoint = Point.Empty;
        Point destinationPoint = Point.Empty;

        Rectangle rect = new Rectangle(0, 0, width, height);

        Bitmap bitmap = new Bitmap(rect.Width, rect.Height);

        Graphics g = Graphics.FromImage(bitmap);

       // g.CopyFromScreen(sourcePoint, destinationPoint, rect.Size);

        g.CopyFromScreen(new Point(rect.Left, rect.Top), Point.Empty, rect.Size);

        bitmap.Save(filepath, ImageFormat.Bmp);


        //Console.WriteLine("(width, height) = ({0}, {1})", maxx - minx, maxy - miny);


    }


}

}

推荐答案

 Bitmap bmpScreenshot = new Bitmap(Screen.AllScreens[1].Bounds.Width, Screen.AllScreens[1].Bounds.Height, PixelFormat.Format32bppArgb);

            Graphics.FromImage(bmpScreenshot).CopyFromScreen(
                                         Screen.AllScreens[1].Bounds.X,
                                         Screen.AllScreens[1].Bounds.Y,
                                         0,
                                         0,
                                         Screen.AllScreens[1].Bounds.Size,
                                         CopyPixelOperation.SourceCopy);

            this.picExtendedModitorScreen.Image = bmpScreenshot;
            this.picExtendedModitorScreen.Refresh();

将此代码放入计时器滴答事件中.

Put this code in timer tick event.

我已将扩展屏幕 1 放入代码中,您可以将其更改为任何其他屏幕.

I have put extended screen 1 in the code you can change it to any other.

这篇关于屏幕捕获未捕获我的应用程序中的对话框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆