C# C上的快照(未安装显示器甚至图形卡)

C# C上的快照(未安装显示器甚至图形卡),c#,screenshot,C#,Screenshot,我正试着记录我的小节目视频和音频中发生的一切。我在论坛上发现有人提到,如果屏幕截图是在没有显示器的机器上制作的——没有显示器物理连接,或者图形卡将显示器置于睡眠模式,甚至没有安装图形卡的服务器,那么可能会出现大问题。有没有办法解决这个问题?目前我还没有访问服务器,甚至不知道它的配置 目前我正在使用这段代码每50毫秒制作一次快照,它在桌面上运行得非常好。如果没有监视器,请不要检查这段代码。。。我正在使用HP touchsmart monoblock桌面 IntPtr myI

我正试着记录我的小节目视频和音频中发生的一切。我在论坛上发现有人提到,如果屏幕截图是在没有显示器的机器上制作的——没有显示器物理连接,或者图形卡将显示器置于睡眠模式,甚至没有安装图形卡的服务器,那么可能会出现大问题。有没有办法解决这个问题?目前我还没有访问服务器,甚至不知道它的配置

目前我正在使用这段代码每50毫秒制作一次快照,它在桌面上运行得非常好。如果没有监视器,请不要检查这段代码。。。我正在使用HP touchsmart monoblock桌面

            IntPtr myIntptr = FormElement.Handle;
            int hwndInt = myIntptr.ToInt32();
            IntPtr hwnd = myIntptr;
            Bitmap bm = new Bitmap(FormElement.Width, FormElement.Height);
            Graphics g = Graphics.FromImage(bm);
            IntPtr hdc = g.GetHdc();
            bool result = PrintWindow(hwnd, hdc, 0);
            g.ReleaseHdc(hdc);
            g.Flush();
            if (result == true)
            {
                bm.Save(aFileName, ImageFormat.Jpeg);
            }
如果我最小化窗口,这不起作用,这也不好

对不起,我的英语和thanx有什么建议。

试试这样:

public static void ScreenCapture(string filename, int width, int height)
{
    var bounds = new Rectangle(0, 0, width, height);
    using (var bitmap = new Bitmap(bounds.Width, bounds.Height))
    using (Graphics g = Graphics.FromImage(bitmap))
    {
        g.CopyFromScreen(
            new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size
        );
        bitmap.Save(filename, ImageFormat.Jpeg);
    }
}

Windows的版本以及是否使用Aero可能与此相关。目前我使用的是win7和vista,但此代码将在WinServer2003上使用。我在VmWare WinServer2003中测试过代码,它工作得很好,但在真正的服务器上,图形卡真的很少见。我认为没有图形卡2003无法工作。。。但真正重要的是,当没有渲染任何内容时,您希望捕获什么。指定它将使人们更容易回答。