begin process at 2012 05 28 10:32:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

API

 > 

Capture d'ecran bureau en "background"


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Capture d'ecran bureau en "background"

mercredi 25 février 2009 à 10:16:05 | Capture d'ecran bureau en "background"

RougailSaucisse

Bonjour à tous,

Je suis actuellement en train de developper un programme (en c#, eh oui désolé pour ceux qui ne considère pas ca comme un "vrai" language :p) et il se trouve que je doive faire quelques appels à certaines fonctions Win32 (FindWindow, Enumwindows....) et c'est pourquoi je pense que ce forum est plus adapté a mon probleme.

Je cherche donc à faire une capture d'écran du bureau (je sais faire une capture d'écran normale, ou encore une capture d'ecran ciblée sur un hwnd mais la je veux vraiment une capture d'écran du bureau uniquement sans toutes les eventuelles fenetres ouvertes). J'aimerai si possible que cela soit fait en "background", c'est a dire que je n'ai pas a faire ShowWindow(hwnd, SW_HIDE) sur chaque fenetre puis ShowWindow(hwnd, SW_SHOW) pour les reafficher ensuite par exemple.

cela est-il réalisable? si oui, pourriez vous m'indiquer quelques pistes?

Merci d'avance,

RougailSaucisse!
mercredi 25 février 2009 à 12:43:16 | Re : Capture d'ecran bureau en "background"

juju12

C'est-à-dire que le bureau est considéré comme la fenêtre de base sur lequel sont peintes toutes les autres fenêtres; par conséquent, si une application a une fenêtre active, le "background" n'existe tout simplement pas puisque cette fenêtre peint par-dessus.
Sous réserve d'erreur de ma part...
De toutes manières, pourquoi veux-tu faire cette capture?
mercredi 25 février 2009 à 13:35:23 | Re : Capture d'ecran bureau en "background"

RougailSaucisse

je souhaite faire une appli qui simule des bureaux multiples, un peu comme sous linux. cela fonctionne deja plus ou moins mais j'aimerai au chargement de l'application qu'il me prenne une screnshot du bureau afin d'avoir un apercu. je sais pas si c'est clair mais bon.
jeudi 26 février 2009 à 12:02:38 | Re : Capture d'ecran bureau en "background"

Lutinore

Administrateur CodeS-SourceS
Réponse acceptée !

Salut, on t'aurait tout aussi bien répondu sur CSharpFR, si la réponse te convient je déplacerais le thread.


[ SuppressUnmanagedCodeSecurity ]
internal static class Win32
{
    [ StructLayout( LayoutKind.Sequential ) ]
    private struct RECT
    {
        public int left;
        public int top;
        public int right;
        public int bottom;
    }

    //[ DllImport( "user32.dll" ) ]
    //private static extern IntPtr GetDesktopWindow( );

    [ DllImport( "user32.dll" ) ]
    [ return: MarshalAs( UnmanagedType.Bool ) ]
    private static extern bool PrintWindow(
        IntPtr hWnd, IntPtr hDCBlt, uint nFlags );

    [ DllImport( "user32.dll", SetLastError = true ) ]
    [ return: MarshalAs( UnmanagedType.Bool ) ]
    private static extern bool GetWindowRect(
        IntPtr hWnd, out RECT lpRect );

    [ DllImport( "user32.dll",
        CharSet = CharSet.Unicode, SetLastError = true ) ]
    private static extern IntPtr FindWindow(
        string lpClassName, string lpWindowName );

    [ DllImport( "user32.dll",
        CharSet = CharSet.Unicode, SetLastError = true ) ]
    private static extern IntPtr FindWindowEx( IntPtr hwndParent,
        IntPtr hwndChildAfter, string lpszClass, string lpszWindow );

    private static IntPtr FindDesktopWindow( )
    {
        IntPtr hWnd = FindWindow( "Progman", "Program Manager" );
        if ( hWnd != IntPtr.Zero )
        {
            hWnd = FindWindowEx( hWnd,
                IntPtr.Zero, "SHELLDLL_DefView", null );
            if ( hWnd != IntPtr.Zero )
            {
                hWnd = FindWindowEx( hWnd,
                    IntPtr.Zero, "SysListView32", null );
            }
        }

        return hWnd;
    }

    public static Bitmap GetTaskBarBitmap( )
    {
        Bitmap bmp = null;
        IntPtr hWnd = FindWindow( "Shell_TrayWnd", null );
        if ( hWnd != IntPtr.Zero )
        {
            RECT rect;
            if ( GetWindowRect( hWnd, out rect ) )
            {
                int width = rect.right - rect.left;
                int height = rect.bottom - rect.top;
                bmp = new Bitmap( width, height,
                    PixelFormat.Format24bppRgb ); // Verifier Screen BPP.
                using ( Graphics g = Graphics.FromImage( bmp ) )
                {
                    IntPtr hDC = g.GetHdc( );
                    PrintWindow( hWnd, hDC, 0 );
                    g.ReleaseHdc( hDC );
                }
            }
        }

        return bmp;
    }

    public static Bitmap GetDesktopBitmap( )
    {
        Bitmap bmp = null;
        IntPtr hWnd = FindDesktopWindow( );
        if ( hWnd != IntPtr.Zero )
        {
            RECT rect;
            if ( GetWindowRect( hWnd, out rect ) )
            {
                int width = rect.right - rect.left;
                int height = rect.bottom - rect.top;
                bmp = new Bitmap( width, height,
                    PixelFormat.Format24bppRgb ); // Verifier Screen BPP.
                using ( Graphics g = Graphics.FromImage( bmp ) )
                {
                    IntPtr hDC = g.GetHdc( );
                    PrintWindow( hWnd, hDC, 0 );
                    g.ReleaseHdc( hDC );
                }
            }
        }

        return bmp;
    }
}

vendredi 27 février 2009 à 02:41:15 | Re : Capture d'ecran bureau en "background"

RougailSaucisse

Bonjour et merci beaucoup.

Cette solution me convient parfaitement, j'ai exactement le résultat attendu. Merci pour ces précieuses infos.
Je commencais a croire que cela n'etait pas possible, apres avoir testé les fonctions GetDesktopWindow(), Paintdesktop() j'avais en retour ou une image de tout l'ecran avec les fenetres ou une image toute noir en utilisant Paintdesktop().
quoiqu'il en soit un grand merci et j'espere que cette source pourra profiter a d'autres personnes eventuellement.

RougailSaucisse
vendredi 27 février 2009 à 10:58:30 | Re : Capture d'ecran bureau en "background"

Lutinore

Administrateur CodeS-SourceS

Hop je déplace sur csharpfr, le code managé ça leur file des boutons sur cppfrance



Cette discussion est classée dans : ecran, bureau, écran, capture, background


Répondre à ce message

Sujets en rapport avec ce message

Capture d'Ecran [ par fdouieb ] Bonjour,a l'adresse suivante :http://www.csharpfr.com/forum.v2.aspx?ID=260557il y a la possibilité de faire des captures d'ecran.cela fonctionne bien Capture d'ecran [ par Wardog56 ] Bonjour à tousJ'aimerai savoir coment faire une commande pour capturer une image sur l'écran de l'ordinateur.Si vous aviez la source.Merci d'avance ;) Capture d'écran et fuite mémoire [ par Nikoui ] J'utilise un morceau de code assez "banal" pour effectuer une capture d'écran. Cependant, dans mon projet, j'effectue de nombreuses captures d'écran.. capture d ecran non resolu [ par danyclassique ] Bonjour a tous .Apres avoir beneficie de la participation sympatique de certains d entre nous ,le probleme de mon projet est toujours present.Je voudr capture d'ecran automatiquement [ par houdaprog ] Salut,je cherche un code qui parcourt toute une solution c# .net et fait des captures d'écrans automatiquement pour toutes les classes graphiques(les interdire la capture d'écran sous Windows [ par vladam ] Bonjour,  Par mesure de sécurité, et afin de protéger des information contre l'impression,dans un logiciel, je dois interdire la capture d'écran sous application WPF en plein ecran [ par ProgTecWeb ] HI or (slt) [^^happy10] je suis la pour me développer alors aider moi et je suis a votre aide bien sur si je peux [^^ange] Bjr je suis nouveau dans l Capture d'Ecran [ par fdouieb ] Bonjour.J'utilise Visual Studio .Net 2003Je voudrais s'avoir s'il y a une possibilité de faire des captures d'écran automatique (que je sauvegarderai Resolution d'ecran [ par taurticolye ] Je travaille sur un projet c# destiné à l'enseignement (jeux) abec bcp de contrôels et photos et fonds d'écran; mon probleme est que le projet a été f Background Worker & TreeView [ par Klums ] Bonjour, Pour cause de multiples manipulations sur les éléments d'un treeview, j'ai mis les procédures le manipulant dans une thread gérer par l'objet


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales