VB 2005 - Capturando a imagem da tela do seu computador
Se você precisa capturar uma cópia da tela para processamento na sua aplicação VB 2005 como uma imagem BMP (bitmap) sem usar recursos de aplicações externas vai ter as APIs do WIndows pois até o momento não da para fazer isto usando somente as funcionalidades do .NET Framework. O jeito é por a mão na massa e criar sua própria função para fazer o serviço.
Vamos então ao que interessa:
Crie um novo projeto no VB 2005 do tipo Windows Application chamado capturaNet (ou algo que achar mais sugestivo) e inclua um módulo ao projeto com o nome de captura.vb
Inclua o seguinte código no módulo recém-criado:
Module
captura Private Declare Function CreateDC Lib "GDI32" Alias "CreateDCA" ( ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, ByVal lpInitData As String) As IntPtr Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC As IntPtr) As IntPtr 'cria um bitmap compatível com o dispostivo associato ao contexto usado. Private Declare Function CreateCompatibleBitmap Lib "GDI32" ( ByVal hDC As IntPtr, ByVal nWidth As Integer, ByVal nHeight As Integer ) As IntPtr Private Declare Function SelectObject Lib "GDI32" ( ByVal hDC As IntPtr, ByVal hObject As IntPtr ) As IntPtr Private Declare Function BitBlt Lib "GDI32" ( ByVal srchDC As IntPtr, ByVal srcX As Integer, ByVal srcY As Integer, ByVal srcW As Integer, ByVal srcH As Integer, ByVal desthDC As IntPtr, ByVal destX As Integer, ByVal destY As Integer, ByVal op As Integer ) As Integer Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC As IntPtr) As Integer Private Declare Function DeleteObject Lib "GDI32" (ByVal hObj As IntPtr) As Integer Const SRCCOPY As Integer = &HCC0020 Public Function capturaTela() As Bitmap ' ----- pega uma imagem da tela Dim screenHandle As IntPtr Dim canvasHandle As IntPtr Dim screenBitmap As IntPtr Dim previousObject As IntPtr Dim resultCode As Integer Dim screenShot As Bitmap ' ----- Obtém uma referencia para o display. screenHandle = CreateDC("DISPLAY", "", "", "") ' ----- Crie um canvas que vai servir como uma exibição canvasHandle = CreateCompatibleDC(screenHandle) ' ----- Crie um bitmap que será tratado como a imagem da tela screenBitmap = CreateCompatibleBitmap(screenHandle,Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height) ' ----- Copie a imagem da tela para Canvas previousObject = SelectObject(canvasHandle, screenBitmap) resultCode = BitBlt(canvasHandle, 0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, screenHandle, 0, 0, SRCCOPY) screenBitmap = SelectObject(canvasHandle, previousObject) ' ----- encerra resultCode = DeleteDC(screenHandle) resultCode = DeleteDC(canvasHandle) ' ----- Copia a imagem para um bitmap .NET. screenShot = Image.FromHbitmap(screenBitmap) DeleteObject(screenBitmap) ' ----- encerra Return screenShot End Function End Module |
No formulário form1.vb inclua um controle Button chamado btnCaptura e um controle CheckBox chamado chkIncluiForm e defina sua propriedade checked como igual a True. Para terminar inclua um controle PictureBox chamado copiaTela e defina sua propriedade SizeMode como igual a StretchImage .
Executando o programa teremos o seguinte resultado :
Serviço pronto !
pegue o projeto completo aqui:capturaTela.zip
Até a próxima dica VB.NET.
José Carlos Macoratti