Screen capture?

  • Thread starter Thread starter Ben Dilts
  • Start date Start date
B

Ben Dilts

Under VB6, it was fairly straightforward to get a
screenshot. For instance, the following code:

Public Function ScreenshotBits(hWnd As Long, Optional
compress As Boolean = True) As Byte()
Dim bitmap_info As BITMAPINFO
Dim pixels() As Byte
Dim Size As Long

Dim dc As Long
dc = GetDC(hWnd)

Dim memDC As Long
memDC = CreateCompatibleDC(dc)

Dim r As RECT
GetClientRect hWnd, r

' Prepare the bitmap description.
With bitmap_info.bmiHeader
.biSize = 40
.biWidth = r.Right - r.Left
' Use negative height to scan top-down.
.biHeight = r.Top - r.Bottom
.biPlanes = 1
.biBitCount = 32
.biCompression = BI_RGB
End With

Dim bm As Long
Dim ptr As Long
bm = CreateDIBSection(dc, bitmap_info, DIB_PAL_COLORS,
ptr, 0, 0)

Dim oldbm As Long
oldbm = SelectObject(memDC, bm)

BitBlt memDC, 0, 0, r.Right - r.Left, r.Bottom -
r.Top, dc, 0, 0, SRCCOPY

' Copy the bitmap's data.
Size = (r.Right - r.Left) * (r.Bottom - r.Top) * 4
ReDim pixels(0 To Size - 1)

GetDIBits dc, bm, 0, r.Bottom - r.Top, pixels(0),
bitmap_info, DIB_PAL_COLORS

If compress Then
Dim z As New clsZLib
z.CompressByte pixels
End If

SelectObject memDC, oldbm
DeleteObject memDC
DeleteObject bm
ScreenshotBits = pixels
End Function

How do I duplicate this functionality in VB.NET? That is,
I could import all the API calls and do almost the exact
same code, but the .NET framwork abstracts tons of things
that were previously the realm of API calls. Is there
a .NET way to do this?



~BenDilts( void );
 
Back
Top