2011-05-30 25 views
10

Hola, estoy trabajando en un programa donde el usuario puede tomar capturas de pantalla. Los usuarios pueden elegir si desean tomar una captura de pantalla de la pantalla 1,2,3 o 4. Sé cómo sacar la primera captura de pantalla de la primera pantalla, pero ¿cómo obtengo las imágenes de la pantalla 2,3 y 4?Captura de pantalla de la segunda pantalla

Mi código para obtener la captura de pantalla de la primera pantalla se ve así:

private void btnScreenOne_Click(object sender, EventArgs e) 
{ 
    Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, 
     Screen.PrimaryScreen.Bounds.Height); 

    Graphics graphics = Graphics.FromImage(bitmap as Image); 

    graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size); 

    bitmap.Save(@"C:\Users\kraqr\Documents\PrintScreens\" + 
     DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + " Screen1" + 
     ".bmp", ImageFormat.Bmp); 

} 

agradecido por respuestas.

Respuesta

8

La clase Screen tiene una propiedad estática AllScreens que le ofrece una matriz de pantallas. Esos objetos tienen una propiedad Bounds que se puede utilizar con seguridad ...

Larga historia corta: Usted inicializar el mapa de bits con el tamaño de la pantalla deseada (no utilice PrimaryScreen, porque eso es sólo la primaria, como su nombre implica) y luego pasar los límites apropiados a CopyFromScreen.

+1

ahora tengo la boudaries de la segunda pantalla y son como deberían en copyfromscreen, pero solo me dan el tamaño de screen2 no la imagen. La imagen sigue siendo de la pantalla1. ¿Alguna idea? –

+1

Mis habilidades psíquicas me dicen que está tomando la captura de pantalla en la posición '(0, 0)' en lugar de dónde comienza realmente la segunda pantalla. Consulte [PVitt'answer] (http://stackoverflow.com/questions/6175968/screenshot-from-second-screen/6176097#6176097) para ver el código que debería funcionar. – Joey

6

Utilice Screen.AllScreens para recuperar las coordenadas a través de la propiedad Bounds de la pantalla específica y páselos a CopyFromScreen.

8

Uso Screen.AllScreens lugar:

foreach (Screen screen in Screen.AllScreens) 
{ 
    screenshot = new Bitmap(screen.Bounds.Width, 
     screen.Bounds.Height, 
     System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
    // Create a graphics object from the bitmap 
    gfxScreenshot = Graphics.FromImage(screenshot); 
    // Take the screenshot from the upper left corner to the right bottom corner 
    gfxScreenshot.CopyFromScreen(
     screen.Bounds.X, 
     screen.Bounds.Y, 
     0, 
     0, 
     screen.Bounds.Size, 
     CopyPixelOperation.SourceCopy); 
    // Save the screenshot 
} 
+0

Se pueden usar pantallas sin usar System.Windows.Forms, estoy haciendo esto en WPF y no quiero hacer referencia a System.Windows.Forms –

Cuestiones relacionadas