2009-08-04 9 views
2

J'ai une application Windows qui racle des pixels de l'écran pour enregistrer (sous la forme d'une vidéo) dans un format de partage d'écran personnalisé. Le problème est que sur les machines qui utilisent un curseur logiciel, le fait de couper à l'écran avec SRCCOPY | CAPTUREBLIT (de sorte que des fenêtres superposées apparaissent également dans l'image) provoque le clignotement du curseur, comme décrit dans Case of the Disappearing Cursor.Le curseur disparaît sur le bitblt

Pour les captures d'écran individuelles, ce n'est pas un problème, mais lorsque plusieurs captures d'écran sont prises en succession rapide, le curseur clignote si rapidement qu'il semble parfois disparaître complètement. J'ai examiné le SDK de Windows Media Encoder (comme décrit dans un article de codeproject, voir ci-dessous) car il ne fait pas clignoter le curseur, mais il semble qu'il n'y ait aucun moyen d'accéder directement aux données de trame. Malheureusement, l'encodage en temps réel et le format personnalisé sont tous les deux des exigences, ce qui rend Windows Media Encoder inutilisable à cette fin.

J'ai également essayé le mode DirectX (décrit dans le même article, voir ci-dessous), et il semble souffrir du même problème.

Est-ce que quelqu'un d'autre a rencontré ce problème? Il doit y avoir un moyen de contourner cela - de nombreux programmes de partage d'écran commerciaux n'ont pas ce genre de problème.

article: www.codeproject.com/KB/dialog/screencap.aspx~~V~~singular~~3rd

Répondre

0

Qu'en est-il d'utiliser un pilote de miroir?

0

Vous avez raison, un miroir fonctionnerait certainement. Cependant, pour l'instant, j'essaie de rester loin de cette approche en raison des problèmes de sécurité et d'autorisations lors de l'installation sous un utilisateur sans droits d'administrateur. Corrigez-moi si je me trompe, mais je ne pense pas qu'il existe un moyen d'installer un pilote sans ces droits. En outre, il semble que ce serait inutilement complexe: devrait être une façon plus simple/moins invasive de le faire. (Je devrais avoir mentionné cela dans ma question initiale)

+0

Certainement il n'y a aucun moyen d'installer un pilote sans droits d'administration; Si vous avez le privilège SeLoadDriver, vous pouvez charger un pilote qui ajouterait votre utilisateur au groupe Administrateurs! – SamB

0

La pensée que j'ai eu pour surmonter le scintillement est de "dessiner" manuellement "votre propre copie de la souris", puis faire l'appel BitBlt, ou appeler BitBlt avec juste SRCCOPY capture ensuite manuellement toutes les fenêtres transparentes visibles par-dessus. Je ne sais pas comment ça se fait dans le commerce (ou l'encodeur de Windows Media fait apparemment).

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

+0

ou éventuellement utiliser aero – rogerdpack

0

Il suffit de copier l'écran et le curseur séparément et les superposer.

0

vous pouvez utiliser l'API de grossissement dans Windows Vista ou version ultérieure. je ne peux pas trouver une bonne idée dans Windows XP.

+0

Cela devrait être un commentaire –

Questions connexes