2010-05-26 21 views
8

En Java podemos hacerlo de la siguiente manera:Cómo capturar una captura de pantalla en .NET desde una aplicación weba?

import java.awt.Dimension; 
import java.awt.Rectangle; 
import java.awt.Robot; 
import java.awt.Toolkit; 
import java.awt.image.BufferedImage; 
import javax.imageio.ImageIO; 
import java.io.File; 

... 

public void captureScreen(String fileName) throws Exception { 

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
    Rectangle screenRectangle = new Rectangle(screenSize); 
    Robot robot = new Robot(); 
    BufferedImage image = robot.createScreenCapture(screenRectangle); 
    ImageIO.write(image, "png", new File(fileName)); 

} 

... 

¿Cómo hacemos esto en .NET desde una aplicación web? Captura la pantalla del cliente y la envía al servidor desde la aplicación.

+0

Para aclarar Me encantaría hacer esto desde una aplicación ASP.NET MVC. –

+0

@CodeToGlory ¿Desea copiar la pantalla del cliente? Esto no es posible en una aplicación web. Tendría que tener código ejecutándose en el cliente. –

+0

Es imposible hacerlo desde ASP.NET. La única forma posible sería crear un control activex, pero incluso con una solución como esa, solo funcionaría con usuarios de IE. Repensar qué es lo que finalmente estás tratando de hacer. – Icemanind

Respuesta

6

El .NET objeto gráfico tiene un método llamado CopyFromScreen() que capturará un área rectangular de la pantalla y copiarla en un mapa de bits. La mejor manera de hacerlo es similar al siguiente:

public void CaptureImage(Point SourcePoint, Point DestinationPoint, Rectangle Selection, string FilePath) 
{ 
    using (Bitmap bitmap = new Bitmap(Selection.Width, Selection.Height)) { 
     using (Graphics g = Graphics.FromImage(bitmap)) { 
      g.CopyFromScreen(SourcePoint,DestinationPoint, Selection.Size); 
     } 
     bitmap.Save(FilePath, ImageFormat.Bmp); 
    } 
} 
+0

Es cierto, pero ahora sabemos que esto debe hacerse desde una aplicación weba Este código por sí solo no es la respuesta –

+0

Sí. Si está tratando de capturar la pantalla del escritorio del cliente, no se puede hacer desde ASP.NET. Tal vez un ActiveX, pero solo funcionaría en usuarios de IE Windows. – Icemanind

+0

¿Qué tal Silverlight? De lo contrario, podría agregar 'No' como respuesta a esta pregunta con una explicación de por qué. –

1
+0

que se parece notablemente a una aplicación web ... o no ... –

+0

En realidad, el requisito de que el código debe ser solo para la aplicación web se agregó después de mi respuesta ... así que gracias por votar. – Paya

4

No, no hay ninguna manera esto se puede hacer uso de HTML o Javascript solo. Simplemente no tienen los métodos para hacerlo. Una posible razón sería que será un riesgo de seguridad como señala John Saunders. Las aplicaciones web pueden capturar todo lo que sucede en la pantalla de los usuarios sin que ellos lo sepan.

El código del lado del servidor como el que ha mostrado no funciona, ya que se ejecuta en el lado del servidor. Sliverlight o un formulario ActiveX podría funcionar, pero no es una opción, ya que le gustaría que funcione en todos los navegadores en todas las plataformas.

edición

icemanind permite darnos a conocer it is possible using Silverlight, pero no se puede capturar toda la pantalla. Probablemente razones de seguridad.

1

Esto no es posible con una aplicación web básica, ni con Silverlight.

También sospecho que la clase Robot en Java no le permite tomar una captura de pantalla cuando se ejecuta como un applet del navegador, de lo contrario sería uno de los mayores agujeros de seguridad jamás encontrados en Java, si es una aplicación web básica con un applet java del tamaño de un píxel podría transmitir un video en vivo de mi escritorio a través de Internet de vuelta al servidor.

Retrocedamos un paso y pregúntese: ¿Qué está tratando de lograr? ¿Por qué quieres tomar la captura de pantalla?

+0

los usuarios se están quejando de un problema que dice que mi vida no puede ser replicada en QA o en cualquier entorno. No significa que no está ocurriendo , por lo que nos gustaría verlo de primera mano –

+0

@CodeToGlory: Tal vez lo mejor es hacer una nueva pregunta sobre cómo capturar lo que el usuario está haciendo con fines de depuración. Los programas de Captura de pantalla o las aplicaciones de uso compartido de escritorio vienen a la mente. –

Cuestiones relacionadas