none
Comment faire une capture d'ecran d'un processus RRS feed

  • Discussion générale

  • Voici une méthode pour prendre une capture d'écran du processus.  Pour cet exemple, nous utiliserons le processus "notepad".   Suivez les étapes ci-dessous :

     

    1. Utilisez System.Diagnostics.Process.MainWindowHandle pour obtenir les informations de processus nécessaires pour obtenir une capture d'écran.

     

    2. Utilisez l'API Windows, SetForegroundWindow, pour activer le processus cible.

     

    3. Transmettre le handle de fenêtre au premier paramètre de la fonction GetWindowRect de l'API Windows, pour obtenir les informations d'emplacement du processus cible.

     

    4. Définir les coordonnées de la fenêtre de processus sur l'écran avec les informations d'emplacement d'étape 3.

     

    5. Utilisez les coordonnées d’étape 4 et Graphics.CopyFromScreen  pour prendre la capture d'écran.


    public partial class Form1 : Form
    
      {
    
        [DllImport("user32.dll")]
    
        [return: MarshalAs(UnmanagedType.Bool)]
    
        private static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
    
        [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
    
        [return: MarshalAs(UnmanagedType.Bool)]
    
        private static extern bool SetForegroundWindow(IntPtr hWnd);
    
        [StructLayout(LayoutKind.Sequential)]
    
        public struct RECT
    
        {
    
          public int Left;
    
          public int Top;
    
          public int Right;
    
          public int Bottom;
    
        }
    
        private void button1_Click(object sender, EventArgs e)
    
        {
    
          Process proc = new Process();
    
          proc.StartInfo.FileName = "notepad.exe";
    
          proc.Start()
    
          proc.WaitFoInputIdle();
    
          if (SetForegroundWindow(proc.MainWindowHandle))
    
          {
    
            RECT srcRect;
    
            if (!proc.MainWindowHandle.Equals(IntPtr.Zero))
    
            {
    
              if (GetWindowRect(proc.MainWindowHandle, out srcRect))
    
              {
    
                int width = srcRect.Right - srcRect.Left;
    
                int height = srcRect.Bottom - srcRect.Top;
    
                Bitmap bmp = new Bitmap(width, height);
    
                Graphics screenG = Graphics.FromImage(bmp);
    
                try
    
                {
    
                  screenG.CopyFromScreen(srcRect.Left, srcRect.Top,  
    
                      0, 0, new Size(width, height),
    
                      CopyPixelOperation.SourceCopy);
    
                  bmp.Save("notepad.jpg", ImageFormat.Jpeg);
    
                }
    
                catch (Exception ex)
    
                {
    
                  MessageBox.Show(ex.Message);
    
                }
    
                finally
    
                {
    
                  screenG.Dispose();
    
                  bmp.Dispose();
    
                }           
    
               }
    
             } 
    
          }
    
        }
    
      }
    
    

     

    Pour plusieurs questions sur Visual Basic .NET, visitez Foire aux Questions – C# FAQ et Tutoriels

     


    Alex Petrescu - MSFT

    mardi 12 janvier 2010 12:40