2009-08-04 13 views
2

Ich habe eine Windows-Anwendung, die Pixel aus dem Bildschirm für die Aufnahme (in Form eines Videos) zu einem benutzerdefinierten Bildschirm-Sharing-Format schabt. Das Problem besteht darin, dass bei Maschinen, die einen Software-Cursor verwenden, das Blitzen auf dem Bildschirm mit SRCCOPY | CAPTUREBLIT (so dass Ebenenfenster auch im Bild angezeigt werden) dazu führt, dass der Cursor blinkt, wie in Case of the Disappearing Cursor beschrieben.Cursor verschwindet auf Bitblt

Für einzelne Screenshots ist dies kein Problem, aber wenn mehrere Screenshots in schneller Folge gemacht werden, blinkt der Cursor so schnell, dass er manchmal ganz verschwindet.

Ich habe mit dem Windows Media Encoder SDK (wie in einem Codeprojekt Artikel beschrieben, siehe unten) untersucht, weil es nicht den Cursor zu blinken verursacht, aber es scheint keine Möglichkeit zu geben, direkt auf die Rahmendaten zuzugreifen. Leider sind sowohl die Echtzeitcodierung als auch das benutzerdefinierte Format beide Voraussetzungen, weshalb Windows Media Encoder für diesen Zweck unbrauchbar wird.

Ich habe auch versucht den DirectX-Weg (in dem gleichen Artikel beschrieben, siehe unten), und es scheint das gleiche Problem zu leiden.

Hat jemand anderes dieses Problem? Es muss einen Weg geben - viele kommerzielle Bildschirm-Sharing-Programme haben kein solches Problem.

Artikel: www.codeproject.com/KB/dialog/screencap.aspx

Antwort

0

Was ist ein Spiegeltreiber?

0

Sie haben Recht, ein Spiegel würde sicherlich funktionieren. Im Moment versuche ich, mich von diesem Ansatz fernzuhalten, da bei der Installation unter einem Benutzer ohne Administratorrechte Bedenken hinsichtlich Sicherheit und Berechtigungen bestehen. Korrigiere mich, wenn ich falsch liege, aber ich glaube nicht, dass es einen Weg gibt, einen Treiber ohne solche Rechte zu installieren. Abgesehen davon scheint es, dass das unnötig kompliziert wäre: da sollte eine einfachere/weniger invasive Möglichkeit sein, dies zu tun. (Ich hätte das in meiner Originalfrage erwähnen sollen)

+0

Sicherlich gibt es keine Möglichkeit, einen Treiber ohne Administratorrechte zu installieren; Wenn Sie die SeLoadDriver-Berechtigung haben, könnten Sie einen Treiber laden, der Ihren Benutzer der Gruppe Administratoren hinzufügen würde! – SamB

0

Der Gedanke, den ich hatte, um das Flimmern zu überwinden, war "manuell" zeichnen "Ihre eigene Kopie der Maus", dann den BitBlt-Aufruf, oder BitBlt mit nur aufrufen SRCCOPY erfasst dann manuell alle sichtbaren transparenten Fenster über dem oberen Rand. Ich weiß nicht, wie das kommerzielle Zeug es macht (oder der Windows Media Encoder scheint das zu tun).

ref: http://us.generation-nt.com/xp-bitblt-captureblt-option-help-26970632.html

+0

oder möglicherweise aero verwenden – rogerdpack

0

Kopieren Sie einfach den Bildschirm und den Cursor getrennt und sie überlagern.

0

Sie können die Vergrößerungs-API in Windows Vista oder höher verwenden. Ich kann keine gute Idee in Windows XP finden.

+0

Dies sollte ein Kommentar sein –