Maison >développement back-end >C++ >Comment puis-je prendre une capture d'écran d'une application spécifique en C# ?

Comment puis-je prendre une capture d'écran d'une application spécifique en C# ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-17 11:56:09885parcourir

How Can I Take a Screenshot of a Specific Application in C#?

C# prend des captures d'écran des applications spécifiées

Prendre une capture d'écran de tout l'écran est facile en utilisant Graphics.CopyFromScreen(). Cependant, un besoin plus complexe consiste à prendre des captures d’écran d’une application spécifique uniquement.

Utilisez la fonction PrintWindow

La solution réside dans l'utilisation de l'API PrintWindow Win32. Il peut capturer le bitmap de la fenêtre même si la fenêtre est masquée ou non à l'écran. Le code suivant montre comment procéder :

<code class="language-csharp">[DllImport("user32.dll")]
public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
[DllImport("user32.dll")]
public static extern bool PrintWindow(IntPtr hWnd, IntPtr hdcBlt, int nFlags);

public static Bitmap PrintWindow(IntPtr hwnd) {
    RECT rc;
    GetWindowRect(hwnd, out rc);

    Bitmap bmp = new Bitmap(rc.Width, rc.Height, PixelFormat.Format32bppArgb);
    Graphics gfxBmp = Graphics.FromImage(bmp);
    IntPtr hdcBitmap = gfxBmp.GetHdc();

    PrintWindow(hwnd, hdcBitmap, 0);

    gfxBmp.ReleaseHdc(hdcBitmap);
    gfxBmp.Dispose();

    return bmp;
}</code>

L'extrait de code ci-dessus nécessite les classes suivantes pour définir la structure RECT :

<code class="language-csharp">[StructLayout(LayoutKind.Sequential)]
public struct RECT {
    private int _Left;
    private int _Top;
    private int _Right;
    private int _Bottom;
    // ... RECT 结构体的其余代码 ...
}</code>

Avec ces extraits de code, vous pouvez facilement prendre une capture d'écran de la fenêtre de l'application cible en obtenant son identifiant. Remplacez simplement hwnd dans la méthode PrintWindow par le handle de la fenêtre d'application souhaitée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn