Est-il possible de prendre une capture d'écran du bureau Windows de l'utilisateur?
Je veux offrir à l'utilisateur une échelle capture d'écran de leur ordinateur de bureau dans mon application.
Est-il un moyen de prendre une capture d'écran de l'utilisateur actuel du bureau de Windows?
J'écris en C#, mais si il y a une meilleure solution dans une autre langue, je suis ouvert à elle.
Pour clarifier, j'ai besoin d'une capture d'écran du Bureau de Windows - c'est le fond d'écran et des icônes uniquement; pas de demandes ou de tout ce qui a le focus.
source d'informationauteur Damovisa
Vous devez vous connecter pour publier un commentaire.
Vous êtes à la recherche pour Les graphiques.CopyFromScreen. Créer une nouvelle image de la bonne taille et de transmettre l'image d'objets Graphiques à l'écran des coordonnées de la région de copie.
Il y a aussi un article décrivant la procédure de programmation pour prendre des captures d'écran.
Réponse à modifier: j'ai mal compris ce que tu voulais dire par "bureau". Si vous voulez prendre une photo du bureau, vous aurez à:
MIN_ALL
message) premièreMIN_ALL_UNDO
message).Une meilleure façon de le faire serait de ne pas déranger les autres windows, mais pour copier l'image directement à partir de la fenêtre du bureau. GetDesktopWindow dans User32 retourne un handle vers le bureau. Une fois que vous avez la poignée de la fenêtre, c'est faire le périphérique de contexte et de copier l'image dans une nouvelle image.
Il y a un excellent exemple sur CodeProject de comment faire pour copier l'image. Recherchez le code d'exemple à propos de l'obtention et de la création du contexte de périphérique dans la "Capture le contenu de la fenêtre".
J'ai l'impression que vous êtes de prise de vue pour prendre une photo de l'ordinateur de bureau (avec le fond d'écran et des icônes), et rien d'autre.
1) Appel ToggleDesktop() dans Shell32 à l'aide de COM
2) Utiliser Des Graphiques.CopyFromScreen pour copier le bureau actuel de la zone
3) Appel ToggleDesktop() pour restaurer les bureau de l'état
Edit: Oui, l'appel de MinimizeAll() est belligérants.
Voici une version mise à jour que j'ai fouetté ensemble:
Ajuster au goût pour les moniteurs multiples scénarios (bien qu'il semble que cela devrait très bien fonctionner pour votre application).
Vous pourriez regarder à l'aide de GetDesktopWindow par le biais de p/invoke, puis prendre le périphérique de contexte et de prendre votre capture d'écran. Il y a un tutoriel très détaillé ici. Il peut-être mieux que perturbant le windows existant.
Tous les anciens réponses sont complètement faux (en minimisant les apps est absurde)
Utilisez simplement SHW api : une ligne de code (le bureau bitmap être mis en cache, l'api simplement blits à votre HDC...)
Vous pouvez toujours prendre la capture d'écran au démarrage de windows avant d'exécuter des applications
ou utiliser un autre ordinateur de bureau par l'utilisation de bureau de commutation. Jetez un oeil ici:
http://www.codeproject.com/Articles/7666/Desktop-Switching
Passer à un autre bureau, prenez la photo et n'oubliez pas que vous n'avez pas besoin de le montrer il suffit de créer "BUREAU"