sabato 31 gennaio 2009

Salvere in un file immagine, la visualizzazione a video in .Net (VB.Net e C#

Vediamo una tecnica di come catturare ciò che viene visualizzato sullo schermo del pc tramite la tecnologia .Net i linguaggi utilizzati sono Visual Basic Net e C#.



Questa tecnica può tornare utile, nel caso che si vuole salvare in un file immagine (jpg) ciò che viene rappresentato a video.


Creazione del progetto.


Dopo aver creato un progetto di tipo windows applicazion, inseriamo nella form un pulsante, il quale avrà il compito di richiamare una funzione per la cattura delle schermate.


Ora passiamo in visualizzazione codice. Per catturare le schermate, dobbiamo utilizzare le api di windows, inseriamo il namespace per la gestione delle api.
Qui di seguito si riporta il frammento di codice.


VB.Net

Imports System.Runtime.InteropServices

C#

using System.Runtime.InteropServices;


A livello di form inseriamo la dichiarazione di api, che utilizzeremo per la gestione delle grafica e cattura dello schermo.


Le api da utilizzate sono BitBlt della dll gdi32 , getdc e ReleaseDc della dll user32.


Di seguito si riporta le dichiarazioni di api.


VB.Net

'Dichiarazione di api


Private Shared Function BitBlt(ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, _

ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As Integer) As Boolean

End Function


Public Shared Function GetDC(ByVal hWnd As System.IntPtr) As System.IntPtr

End Function



Public Shared Function ReleaseDC(ByVal hWnd As System.IntPtr, ByVal hDC As System.IntPtr) As Integer

End Function

C#

//Dichiarazione di api

[DllImport("gdi32.dll")]

private static extern bool BitBlt(


IntPtr hdcDest,


int nXDest,


int nYDest,


int nWidth,


int nHeight,


IntPtr hdcSrc,


int nXSrc,


int nYSrc,


System.Int32 dwRop


);


[DllImport("User32.dll")]

public extern static System.IntPtr GetDC(System.IntPtr hWnd);

[DllImport("User32.dll")]


public extern static int ReleaseDC(System.IntPtr hWnd, System.IntPtr hDC);


Ora non resta che scrivere la funzione per la cattura ed il salvataggio delle schermate


La funzione riportata qui di seguito, utilizza le api elencate in precedenza e salva in un file jpg ciò che si trova video.


Si riporta il frammento di codice relativo alla funzione di cattura video.



VB.Net

Private Sub Cattura()

Dim desktopDC As System.IntPtr = GetDC(System.IntPtr.Zero)


Dim bm As New Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height)


Dim g As Graphics = Graphics.FromImage(bm)


Dim bmDC As System.IntPtr = g.GetHdc()


BitBlt(bmDC, 0, 0, bm.Width, bm.Height, desktopDC, _

0, 0, 13369376)


ReleaseDC(System.IntPtr.Zero, desktopDC)


g.ReleaseHdc(bmDC)


g.Dispose()

' Salvo l'immagine in formato jpeg

Dim filename As String = "c:\immagine.jpg"

bm.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg)

MessageBox.Show("Immagine salvata: " + filename)




End Sub

C#

private void Cattura()

{

System.IntPtr desktopDC = GetDC(System.IntPtr.Zero);


Bitmap bm = new Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height);


Graphics g = Graphics.FromImage(bm);


System.IntPtr bmDC = g.GetHdc();




BitBlt(bmDC, 0, 0, bm.Width, bm.Height, desktopDC, 0, 0, 0x00CC0020 );




ReleaseDC(System.IntPtr.Zero, desktopDC);


g.ReleaseHdc(bmDC);


g.Dispose();

// Salvo l'immagine in formato jpeg

string filename = "c:\\immagine.jpg";

bm.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg);

MessageBox.Show("Immagine salvata: " + filename);




}





Dal pulsante, richiamiamo la funzione per la cattura dello schermo.


Di seguito si riporta le suddette operazioni




VB.Net

Private Sub BtnCattura_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCattura.Click

Cattura()

End Sub

C#

private void BtnCattura_Click(object sender, EventArgs e)

{

Cattura();

}



Conclusioni


In questo articolo è stata illustrata una tecnica per la cattura video, il codice può essere implementato per fare software che possono tornare utile per la gestione remota o assistenza.


Tramite la parola download potete scaricare il file di esempio utilizzato nell’articolo.



Download.



Nessun commento: