2010-05-16 6 views
2

Comment faire une capture d'écran de la fenêtre du programme en utilisant WinAPI & C#?Capture d'écran de la fenêtre en utilisant WinAPI

Je l'envoi WM_PAINT (0x000F) message à la fenêtre, que je veux capture d'écran, wParam = HDC gérer, mais pas de capture d'écran dans ma zone de l'image. Si j'envoie un message WM_CLOSE, tout le processus de fermeture (fenêtre cible se ferme). Qu'est-ce que je fais de mal avec WM_PAINT? Peut être HDC n'est pas le composant PictureBox (WinForms)? P.S. GetLastError() == ""

[DllImport("User32.dll")] 
public static extern Int64 SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); 
    ..... 

SendMessage(targetWindowHandle, 0x000F, pictureBox.Handle, IntPtr.Zero); 
+0

Non. J'ai besoin de capture d'écran fenêtre non active, et sans les rendre actifs. Envoyez-leur simplement WM_PAINT et obtenez une réponse. –

Répondre

1

pictureBox.Handle est une poignée de fenêtre, pas une poignée DC. Il existe plusieurs guides en ligne pour faire des captures d'écran. L'un est here. Voir aussi la réponse @In silico.

+0

Comme sera l'écriture alors? Pour copier l'image dans n'importe quel endroit –

2

Vous pouvez également prendre capture d'écran en utilisant le code purement géré sans la nécessité d'Interop. Le code suivant prendra un instantané d'une zone 100x100 de l'écran, bien sûr, vous pouvez ajuster en plein écran. La fonction clé est Graphics.CopyFromScreen

Bitmap bmp = new Bitmap(100,100); 
    using (Graphics g = Graphics.FromImage(bmp)) 
    { 
    g.CopyFromScreen(0, 0, 0, 0, new Size(100, 100));   
    } 
    pictureBox1.Image = bmp; 
Questions connexes