IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] Générer un Screenshot..


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut [C#] Générer un Screenshot..
    Bonjour j'ai 2 soucis...
    je voudrais réaliser la capture de mon application.
    pour cela j'utilise ce morceau de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
     
    // Create a graphics object from the bitmap
    Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot);
     
    // Take the screenshot from the upper left corner to the right bottom corner
    				gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
     
    // Save the screenshot to the specified path that the user has chosen
    string pictureName = "screenshot.png";
    bmpScreenshot.Save(@"Logs\" + pictureName, ImageFormat.Png);
    ca...ca marche...le hic...le premier...c'est que si je lance 2 copie d'ecran...j'ai une exception qui se lève sur la méthode save du Bitmap :

    A generic error occured in GDI+
    meme en effacant le fichier généré la 1ere fois...rien n'y fait...

    ensuite le seconde problème, lors de la capture d'ecran, j'ai une MessageDialog en 1er plan, par exemple cette MessageDialog possède un bouton qui lance ma capture d'ecran, or...je voudrais prendre la capture de ma fenetre principale...qui se situe forcément au 2nd plan...auriez-vous une idée pour résoudre ces problèmes...

    D'avance merci
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 274
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 274
    Points : 1 280
    Points
    1 280
    Par défaut
    utilise une simulation sur la touche "imprecran" (dsl c'est du vb)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ' AUTRE CODE BEAUCOUP PLUS SIMPLE ICI POUR LA FENETRE ACTIVE---
            SendKeys.SendWait("{PRTSC}")
            Dim window As Bitmap
            window = CType(Clipboard.GetDataObject().GetData("Bitmap"), Bitmap)
            PictureBox1.Image = window
     
            ' ICI POUR LE SCREEN ENTIER
            SendKeys.SendWait("+{PRTSC}")
            Dim screen As Bitmap
            screen = CType(Clipboard.GetDataObject().GetData("Bitmap"), Bitmap)
            PictureBox2.Image = screen
    j'suis vert !

  3. #3
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    ah oui je précise un truc aussi...l'image générée est censée etre attachée par la suite en pièce jointe a un mail...
    donc elle ne doit pas etre stockée...enfin je n'ai pas forcément besoin de la stocker...
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par Piolet
    ah oui je précise un truc aussi...l'image générée est censée etre attachée par la suite en pièce jointe a un mail...
    donc elle ne doit pas etre stockée...enfin je n'ai pas forcément besoin de la stocker...
    Pourtant, dans ton exemple, tu la stockes bien

    bmpScreenshot.Save(@"Logs\" + pictureName, ImageFormat.Png);

  5. #5
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par Morpheus
    Pourtant, dans ton exemple, tu la stockes bien

    bmpScreenshot.Save(@"Logs\" + pictureName, ImageFormat.Png);
    oui...mais enfin dans l'absolu si qq1 a une solution pour m'eviter de la stocker et faire comprendre a mon mail que je veux lui mettre une image en pièce jointe...je suis preneur...
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 57
    Points : 57
    Points
    57
    Par défaut
    Pour ton 2eme problème, j'ai testé en ajoutant ces quelques lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
                Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
     
                // Create a graphics object from the bitmap
                Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot);
                this.Hide();
     
                // Take the screenshot from the upper left corner to the right bottom corner
                gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
     
                this.Show();
     
                // Save the screenshot to the specified path that the user has chosen
                string pictureName = "screenshot.png";
                bmpScreenshot.Save(pictureName, ImageFormat.Png);
    Et ça ne plante pas lorsque je le lance plusieurs fois d'affilé... est-ce lié au @"LOG" ??

    Pour l'envoyer par email sans l'enregistrer sur le disque, il faudrait convertir l'image en base64 depuis bmpScreenshot pour pouvoir l'ajouter à ton email

  7. #7
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par Piolet
    dans l'absolu si qq1 a une solution pour m'eviter de la stocker et faire comprendre a mon mail que je veux lui mettre une image en pièce jointe...je suis preneur...
    Passe par un MemoryStream qui contiendra ton image, on peut les utiliser pour les pièces jointes (cf. classe Attachment), mais ce n'est valable qu'avec le Framework 2.0 il me semble. Sous le Framework 1.1 il y a peut être un équivalent.
    Pas de questions techniques par MP

  8. #8
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par StormimOn
    Passe par un MemoryStream qui contiendra ton image, on peut les utiliser pour les pièces jointes (cf. classe Attachment), mais ce n'est valable qu'avec le Framework 2.0 il me semble. Sous le Framework 1.1 il y a peut être un équivalent.
    nickel merci...je suis justement sous le framework 2
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  9. #9
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par murlock
    Pour ton 2eme problème, j'ai testé en ajoutant ces quelques lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
                Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
     
                // Create a graphics object from the bitmap
                Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot);
                this.Hide();
     
                // Take the screenshot from the upper left corner to the right bottom corner
                gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
     
                this.Show();
     
                // Save the screenshot to the specified path that the user has chosen
                string pictureName = "screenshot.png";
                bmpScreenshot.Save(pictureName, ImageFormat.Png);
    Et ça ne plante pas lorsque je le lance plusieurs fois d'affilé... est-ce lié au @"LOG" ??

    Pour l'envoyer par email sans l'enregistrer sur le disque, il faudrait convertir l'image en base64 depuis bmpScreenshot pour pouvoir l'ajouter à ton email
    je test ca demain au boulot...nickel merci bcp
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  10. #10
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par murlock
    Et ça ne plante pas lorsque je le lance plusieurs fois d'affilé... est-ce lié au @"LOG" ??

    Pour l'envoyer par email sans l'enregistrer sur le disque, il faudrait convertir l'image en base64 depuis bmpScreenshot pour pouvoir l'ajouter à ton email
    est-ce que en faisant ceci tes captures d'ecran etaient toutes différentes a chaque nouvelle capture.
    En fait je m'appercois que ca ne plante plus...mais qu'il n'y a qu'une capture de faite...les suivantes n'ont aucun effet...le fichier généré (s'il n'est pas effacé) n'est pas modifié, et, s'il est effacé, n'est pas regénéré lors de la sauvegarde suivante...

    une idée ?
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

  11. #11
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    j'ai trouvé le problème a ma solution.

    En fait lors de ma génération de screenshot mon application ne devenait plus l'application principale, et donc le repertoire que j'utilisais comme etant le repertoire courant a varié au cours de la génération de screenshot...d'ou le problème de sauvegarde de fichier...

    donc en prenant un chemin fixe cela marche comme il faut.

    Merci pour votre aide
    Hum hum hum...géant vert ! ! !
    Le meilleur moyen de trouver c encore de chercher ! ! !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Générer liste de picturebox avec screenshot
    Par mirsa57 dans le forum Débuter
    Réponses: 1
    Dernier message: 19/04/2013, 20h34
  2. Générer un screenshot à partir de l'adresse
    Par nims dans le forum Langage
    Réponses: 2
    Dernier message: 10/01/2010, 22h20
  3. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30
  4. [CR][VB] comment générer un état ?
    Par ndi dans le forum SDK
    Réponses: 3
    Dernier message: 22/08/2002, 13h13
  5. Réponses: 5
    Dernier message: 08/07/2002, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo