Get a Picture of the Desktop's Contents
This tip shows how to get a picture of the entire desktop. You can use the picture that you get to draw onto (perhaps as the basis for a screen saver), or as a basis for capturing areas of the desktop.
Start a new project in VB. Add a new module, and add the following code:
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32" ( _
ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function DeleteDC Lib "gdi32" ( _
ByVal hDC As Long) As Long
Private Declare Function CreateDCAsNull Lib "gdi32" Alias "CreateDCA" ( _
ByVal lpDriverName As String, lpDeviceName As Any, _
lpOutput As Any, lpInitData As Any) As Long
Private Declare Function BitBlt Lib "gdi32" ( _
ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long,
ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long,
ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Public Sub CopyDesktop( _
ByRef objTo As Object _
)
Dim hWnd As Long
Dim tR As RECT
Dim hDC As Long
' Note: objTo must have hDC,Picture,Width and Height
' properties and should have AutoRedraw = True
' Get the size of the desktop window:
hWnd = GetDesktopWindow()
GetWindowRect hWnd, tR
' Set the object to the relevant size:
objTo.Width = (tR.Right - tR.Left) * Screen.TwipsPerPixelX
objTo.Height = (tR.Bottom - tR.Top) * Screen.TwipsPerPixelY
' Now get the desktop DC:
hDC = CreateDCAsNull("DISPLAY", ByVal 0&, ByVal 0&, ByVal 0&)
' Copy the contents of the desktop to the object:
BitBlt objTo.hDC, 0, 0, _
(tR.Right - tR.Left), (tR.Bottom - tR.Top), hDC, 0, 0, SRCCOPY
' Ensure we clear up DC GDI has given us:
DeleteDC hDC
End Sub
To try out the desktop capture, add a Picture Box to the project's form. Set the AutoRedraw property of the Picture Box to True. Then add a Command button. Make sure that the Command button is above the Picture Box in the form, otherwise when you capture the desktop and get an Image of your form, it can get a little confusing working out which is the real button to click on! Add the following code to the Command button's click event:
Private Sub Command1_Click()
Picture1.Cls
CopyDesktop Picture1
Picture1.Refresh
End Sub
When you click on the button, the Picture will get a complete image of the desktop. It will also be resized to the size of the desktop.
|
|