截图:Windows Server中带有Web浏览器控件的WinForms应用程序

本文关键字:控件 浏览器 WinForms 应用程序 Web Windows Server 截图 | 更新日期: 2023-09-27 18:03:42

我使用以下代码捕获Form截图:

            this.TopMost = true;
            this.FormBorderStyle = FormBorderStyle.None;
            this.WindowState = FormWindowState.Maximized;
            this.Activate();
            Application.DoEvents();

            Bitmap screenShotBMP = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
            Graphics screenShotGraphics = Graphics.FromImage(screenShotBMP);
            screenShotGraphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
            screenShotBMP.Save(imagePath, ImageFormat.Gif);
            screenShotGraphics.Dispose();
            screenShotBMP.Dispose();

            this.TopMost = false;
            this.FormBorderStyle = FormBorderStyle.Sizable;
            this.WindowState = FormWindowState.Minimized;

当我登录到服务器时,它工作正常(我可以看到生成的屏幕截图),但是当它被锁定时,行:

        screenShotGraphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);

给出错误"Handle is invalid"。

我才知道,这是因为没有人登录时没有桌面。有谁能告诉我其他选择吗?

我有一个WinForms应用程序,计划每5分钟运行一次,当它运行时,我必须截取Form的屏幕截图。

截图:Windows Server中带有Web浏览器控件的WinForms应用程序

这是不可能的。当工作站被锁定时,Winlogon切换到安全桌面。在这种情况下,就像你说的,没有桌面可以拍照。

即使管理员也没有访问安全桌面的权限,所以即使你想要,也不能给拍照。解决你在这里遇到的安全限制的唯一可能的方法是将应用程序重写为服务,这样你就可以获得对安全桌面的访问权限,但随后你会遇到另一组安全限制:即,服务不允许以任何方式与用户交互,因此没有"桌面"。

在这种情况下,你甚至不清楚期望发生什么。如果没有桌面可以拍照,你想让拍什么?

最重要的是,Windows是一个多用户操作系统,而且已经存在了几十年。你必须放弃这种只有一个"桌面"的16位概念模型,每个人对所有东西都有完全的访问权限。

有其他更好的方法来监控工作站上发生的事情,而不是定期截图& help;这些方法都是有效的。我不能给出一般的建议,因为这取决于你到底想要监控什么。

我刚刚测试了printwinwindow api,它在我的桌面锁定时工作:c# printwinwindow返回黑色图像