2012-11-05 13 views
5

Ich muss meinen Bildschirm als Video aufnehmen, dafür habe ich Expression Encoder 4 benutzt, aber in meiner Anwendung muss ich auch ein einzelnes Fenster erfassen, aber ich finde keinen Weg es, mit EE4 habe ich versucht, die CaptureRectangle meiner ScreenCaptureJob dynamisch zu ändern, aber das scheint nicht möglich zu sein. Also meine Frage ist, weißt du sowieso, diese 'Single Window Capture' mit vorzugsweise C# oder vielleicht C++ zu machen?Videoaufnahme von nur einem Fenster

Antwort

2

Sie könnte Holen Sie sich den Fenstergriff des Fensters, das Sie interessiert sind, setzen Sie einen Timer, und bei jedem Timer-Tick erfassen Sie den Inhalt dieses Fensters. Dies ist nicht trivial, aber sicherlich möglich. Ich habe es vor vielen Jahren in C gemacht, aber dieser Code ist längst weg.

Das Problem ist einfacher, wenn Sie nur einen rechteckigen Bereich des Bildschirms erfassen möchten. Sie können den Fensterhandle abrufen, seine Größe und Position abfragen und dann diesen Bereich vom Bildschirm kopieren. In C oder C++ würden Sie den Desktop-DC abrufen und Bits davon kopieren. In C# könnten Sie Bitmap erstellen, das ist die Größe des Fensters, rufen Sie Graphics.FromImage auf, um ein Graphics Objekt für das Bild zu erhalten, und rufen Sie dann CopyFromScreen auf, um den Fensterinhalt abzurufen. Der Nachteil ist, dass dies nur funktioniert, wenn nichts das fragliche Fenster bedeckt. Wenn etwas einen Teil des Fensters bedeckt, werden Sie das erfassen.

In jedem Fall enden Sie mit einem Strom von Bildern, die Sie zu einem Video kombinieren müssen. Es gibt eine Reihe von Bibliotheken, die das tun werden. Für eine C# -Lösung sollten Sie sich zunächst mit create video from streamed images c# befassen. Ich vermute, dass es ähnliche Bibliotheken für C++ gibt. Es gibt auch einige Befehlszeilen-Tools, die es tun werden, obwohl meine Erfahrung mit ihnen nicht zufriedenstellend war.

+0

Diese Technik war genau das, was ich vor dem Einsatz von Encodern machen wollte, meine einzigen Befürchtungen waren die Performance, aber nachdem ich mit DirectX gespielt habe, sehe ich, dass das kein Problem ist. –