2010-03-31 5 views
3

J'essaie de créer une application WinForms qui prend une capture d'écran sur un intervalle défini. Je pense que mon code est correct, mais lorsque j'essaie de l'exécuter, le message d'erreur "System.Runtime.InteropServices.ExternalException n'est pas géré, une erreur générique s'est produite dans GDI +".C# - Capture d'écran basée sur une minuterie

System.Windows.Forms.Timer t = new System.Windows.Forms.Timer(); 
    Thread th; 
    private static Bitmap bmpScreenshot; 
    private static Graphics gfxScreenshot; 

    void TakeScreenShot() 
    { 
     bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); 
     gfxScreenshot = Graphics.FromImage(bmpScreenshot); 
     gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy); 
     bmpScreenshot.Save(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\ScreenCaptures", ImageFormat.Png); 
     th.Abort(); 
    } 

    void StartThread(object sender, EventArgs e) 
    { 
     th = new Thread(new ThreadStart(TakeScreenShot)); 
     th.Start(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\ScreenCaptures"); 
     t.Interval = 500; 
     t.Tick += new EventHandler(StartThread); 
     t.Start(); 
    } 

La ligne qui est de donner mon problème est:

bmpScreenshot.Save(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\ScreenCaptures", ImageFormat.Png); 

Toutes les idées sur ce qui se passe mal? Merci d'avance.

Répondre

3

Vous devez enregistrer avec un nom de fichier réel, comme ceci:

bmpScreenshot.Save(Environment.GetFolderPath 
    (Environment.SpecialFolder.DesktopDirectory) 
    + @"\ScreenCaptures\newfile.png", ImageFormat.Png); 

Votre code passe dans un chemin qui ne comprend pas un nom de fichier. Vérifiez également que Environment.GetFolderPath (...) renvoie un chemin sans "\" à la fin, ou vous obtiendrez un "\\" dans votre chemin.

+0

C'est bizarre - j'ai dû taper 3 barres obliques inversées pour que 2 apparaisse. – MusiGenesis

Questions connexes