How to Copy Entire Screen into a Picture Box in VB for Windows

ID Number: Q80670

1.00

WINDOWS

Summary:

Using the Windows API call BitBlt, you can capture the entire

Microsoft Windows screen and place the image into a Visual Basic

picture box. You first get the handle to the desktop, then use the

desktop window handle to get the handle to the desktop's device

context (hDC), and finally use the Windows API call BitBlt to copy the

screen into the Picture property of a Visual Basic picture box

control.

This information applies to Microsoft Visual Basic programming system

version 1.0 for Windows.

More Information:

Example

-------

1. Start Visual Basic (VB.EXE). Form1 is created by default.

2. Create a picture box (Picture1) on Form1.

3. Set the following properties:

Control Property Value

------- -------- -----

Picture1 AutoRedraw True

Picture1 Visible False

4. Add the following code:

Global.Bas

----------

Type lrect

left As Integer

top As Integer

right As Integer

bottom As Integer

End Type

Declare Function GetDesktopWindow Lib "user" () As Integer

Declare Function GetDC Lib "user" (ByVal hWnd%) As Integer

'Note: The following Declare should be on one line:

Declare Function BitBlt Lib "GDI" (ByVal hDestDC%,

ByVal X%,

ByVal Y%,

ByVal nWidth%,

ByVal nHeight%,

ByVal hSrcDC%,

ByVal XSrc%,

ByVal YSrc%,

ByVal dwRop&

) As Integer

'Note: The following Declare should be on one line:

Declare Function ReleaseDC Lib "User"(ByVal hWnd As Integer,

ByVal hDC As Integer

) As Integer

Declare Sub GetWindowRect Lib "User" (ByVal hWnd%, lpRect As lrect)

Global Const True = -1

Global Const False = 0

Global TwipsPerPixel As Single

Form1

-----

Sub Form_Click ()

Call GrabScreen

End Sub

Sub GrabScreen ()

Dim winSize As lrect

' Assign information of the source bitmap

' Note that BitBlt requires coordinates in pixels

hwndSrc% = GetDesktopWindow()

hSrcDC% = GetDC(hwndSrc%)

XSrc% = 0: YSrc% = 0

Call GetWindowRect(hwndSrc%, winSize)

nWidth% = winSize.right 'Units in pixels

nHeight% = winSize.bottom 'Units in pixels

' Assign informate of the destination bitmap

hDestDC% = Form1.Picture1.hDC

x% = 0: Y% = 0

' Set global variable TwipsPerPixel and use to set

' picture box to same size as screen being grabbed.

' If picture box not the same size as picture being

' BitBlt'ed to it, it will chop off all that does not

' fit in the picture box.

GetTwipsPerPixel

Form1.Picture1.Top = 0

Form1.Picture1.Left = 0

Form1.Picture1.Width = (nWidth% + 1) * TwipsPerPixel

Form1.Picture1.Height = (nHeight% + 1) * TwipsPerPixel

' Assign the value of the constant SRCOPYY to the Raster operation.

dwRop& = &HCC0020

' Note function call must be on one line:

Suc% = BitBlt(hDestDC%, x%, Y%, nWidth%, nHeight%,

hSrcDC%, XSrc%, YSrc%, dwRop&)

' Release the DeskTopWindow's hDC to Windows.

' Windows may hang if this is not done.

Dmy% = ReleaseDC(hwndSrc%, hSrcDC%)

'Make the picture box visible.

Form1.Picture1.Visible = True

End Sub

Sub GetTwipsPerPixel ()

'Set a global variable with the Twips to Pixel ratio.

Form1.ScaleMode = 3

NumPix = Form1.ScaleHeight

Form1.ScaleMode = 1

TwipsPerPixel = Form1.ScaleHeight / NumPix

End Sub

5. Run the program and click on the form.

6. With the mouse, change the size of the form to see more of the

picture box. With a little work, you can use this as a "screen

saver" program.

Additional reference words: 1.00