2010-12-12 5 views
0

Ich versuche alles aufzunehmen, was in meinem kleinen Programm (Video und Audio) passiert. Ich habe in Foren gefunden, dass es ein großes Problem geben kann, wenn Screenshot auf dem Rechner ohne Monitor erstellt wird - kein Monitor physisch angeschlossen ist oder wenn Grafikkarten im Sleep-Modus oder sogar ohne installierte Grafikkarte (Server) laufen. Gibt es eine Möglichkeit, dieses Problem zu lösen? zur Zeit habe ich keinen Zugriff auf den Server und weiß auch nicht, es ist die Konfiguration ((Schnappschuss auf C# (ohne Monitor oder sogar Grafikkarte installiert)

derzeit verwende ich diesen Code, um Snapshots alle 50 Millisekunden und es funktioniert gut auf dem Desktop-PC (kann diesen Code nicht überprüfen ohne Monitor ... ich bin mit HP Touchsmart Desktop-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); 
      } 

dieses doent Arbeit, wenn ich mein Fenster minimieren und das ist auch nicht gut.

sorry für mein Englisch und Danke für jede Beratung.

+0

Die Version von Windows (und wenn Sie Aero verwenden oder nicht) könnte relevant sein. – CodesInChaos

+0

Derzeit verwende ich Win7 und Vista, aber dieser Code wird auf WinServer2003 verwendet. Ich habe Code in VmWare WinServer2003 getestet und es funktioniert gut, aber auf den echten Servern sind Grafikkarten wirklich selten. – khorght

+0

Ich glaube nicht, 2003 kann ohne eine Grafikkarte arbeiten ... Aber was wirklich wichtig ist, ist was Sie erfassen möchten, wenn nichts gerendert wird. Die Angabe würde den Menschen die Antwort erleichtern. –

Antwort

0

Versuchen Sie wie folgt:

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); 
    } 
}