Est-il possible de prendre une capture d’écran du bureau Windows de l’utilisateur?

Je souhaite fournir à l’utilisateur une capture d‘écran réduite de son bureau dans mon application.

Existe-t-il un moyen de prendre une capture d’écran du bureau Windows de l’utilisateur actuel?

J’écris en C #, mais s’il existe une meilleure solution dans une autre langue, je suis ouvert à cela.

Pour clarifier, j’ai besoin d’une capture d’écran du bureau Windows – c’est-à-dire le fond d’écran et les icons uniquement; aucune application ou quoi que ce soit qui a le focus.

    Vous recherchez Graphics.CopyFromScreen . Créez un nouveau bitmap de la bonne taille et transmettez les coordonnées de l’écran de l’object graphique Bitmap de la région à copier.

    Il y a aussi un article décrivant comment prendre des instantanés par programmation.

    Réponse à l’édition : J’ai mal compris ce que vous entendiez par “bureau”. Si vous voulez prendre une photo du bureau, vous devrez:

    1. Réduire toutes les fenêtres en utilisant Win32API (envoyer un message MIN_ALL ) en premier
    2. Prenez l’instantané
    3. Puis annulez le minimiser tout (envoyer un message MIN_ALL_UNDO ).

    Une meilleure façon de le faire serait de ne pas déranger les autres fenêtres, mais de copier l’image directement depuis la fenêtre du bureau. GetDesktopWindow dans User32 renverra un handle sur le bureau. Une fois que vous avez le handle de la fenêtre, obtenez son contexte de périphérique et copiez l’image dans une nouvelle bitmap.

    Il existe un excellent exemple sur CodeProject pour savoir comment copier l’image à partir de celui-ci. Recherchez le code exemple sur l’obtention et la création du contexte de périphérique dans la section “Capture du contenu de la fenêtre”.

    J’ai l’impression que vous prenez des photos pour prendre une photo du bureau réel (avec du papier peint et des icons), et rien d’autre.

    1) Appelez ToggleDesktop () dans Shell32 en utilisant COM
    2) Utilisez Graphics.CopyFromScreen pour copier la zone de bureau actuelle
    3) Appelez ToggleDesktop () pour restaurer l’état du bureau précédent

    Edit: Oui, appeler MinimizeAll () est belligérant.

    Voici une version mise à jour que j’ai fouettée ensemble:

      ///  /// Minimizes all running applications and captures desktop as image /// Note: Requires reference to "Microsoft Shell Controls and Automation" ///  /// Image of desktop private Image CaptureDesktopImage() { //May want to play around with the delay. TimeSpan ToggleDesktopDelay = new TimeSpan(0, 0, 0, 0, 150); Shell32.ShellClass ShellReference = null; Bitmap WorkingImage = null; Graphics WorkingGraphics = null; Rectangle TargetArea = Screen.PrimaryScreen.WorkingArea; Image ReturnImage = null; try { ShellReference = new Shell32.ShellClass(); ShellReference.ToggleDesktop(); System.Threading.Thread.Sleep(ToggleDesktopDelay); WorkingImage = new Bitmap(TargetArea.Width, TargetArea.Height); WorkingGraphics = Graphics.FromImage(WorkingImage); WorkingGraphics.CopyFromScreen(TargetArea.X, TargetArea.X, 0, 0, TargetArea.Size); System.Threading.Thread.Sleep(ToggleDesktopDelay); ShellReference.ToggleDesktop(); ReturnImage = (Image)WorkingImage.Clone(); } catch { System.Diagnostics.Debugger.Break(); //... } finally { WorkingGraphics.Dispose(); WorkingImage.Dispose(); } return ReturnImage; } 

    Ajustez au goût pour plusieurs scénarios de moniteur (même si cela semble fonctionner correctement pour votre application).

    Vous pouvez envisager d’utiliser GetDesktopWindow via p / invoke, puis obtenir le contexte du périphérique et prendre votre snapshot. Il y a un tutoriel très détaillé ici . Cela pourrait être mieux que de perturber les fenêtres existantes.

    Toutes les anciennes réponses sont complètement fausses ( minimiser les applications est absurde )
    Il suffit d’utiliser SHI api: une ligne de code (le bitmap du bureau étant mis en cache, l’api le bloque simplement sur votre HDC …)

    Vous pouvez toujours intercepter la capture d’écran au démarrage de Windows avant que les applications ne s’exécutent ou n’utilisent d’autres postes de travail en utilisant la commutation du bureau. Jetez un oeil ici: http://www.codeproject.com/Articles/7666/Desktop-Switching Basculez vers un autre bureau, prenez des photos et rappelez-vous que vous n’avez pas besoin de le montrer, créez-le simplement “DESKTOP”