161299
(http://support.microsoft.com/kb/161299/EN-US/
)
How To Capture and Print the Screen, a Form, or any Window
shows how to capture any form or window, including the screen, and place it in a Visual Basic Picture object. If the only requirement is to copy the active window or screen to the clipboard, the keybd_event API is a much easier and lower overhead approach. Calling the keybd_event API achieves the same functionality as entering the key combinations PRINTSCRN (copy the screen to the clipboard) or ALT+PRINTSCRN (copy the active window to the clipboard). If you also need to print the image, a hidden PictureBox can provide this functionality.
Start a new Visual Basic Standard EXE project. Form1 is created by default.
Add three CommandButtons and a PictureBox to Form1.
Add the following code into the General Declarations section of Form1:
Option Explicit
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetVersionExA Lib "kernel32" _
(lpVersionInformation As OSVERSIONINFO) As Integer
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12
Dim blnAboveVer4 As Boolean
Private Sub Command1_Click()
If blnAboveVer4 Then
keybd_event VK_SNAPSHOT, 0, 0, 0
Else
keybd_event VK_SNAPSHOT, 1, 0, 0
End If
End Sub
Private Sub Command2_Click()
If blnAboveVer4 Then
keybd_event VK_SNAPSHOT, 1, 0, 0
Else
keybd_event VK_MENU, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
End If
End Sub
Private Sub Command3_Click()
' Load the captured image into a PictureBox and print it
Picture1.Picture = Clipboard.GetData()
Printer.PaintPicture Picture1.Picture, 0, 0
Printer.EndDoc
End Sub
Private Sub Form_Load()
Dim osinfo As OSVERSIONINFO
Dim retvalue As Integer
osinfo.dwOSVersionInfoSize = 148
osinfo.szCSDVersion = Space$(128)
retvalue = GetVersionExA(osinfo)
If osinfo.dwMajorVersion > 4 Then blnAboveVer4 = True
Picture1.Visible = False
Command1.Caption = "Print Screen"
Command2.Caption = "Alt+Print Screen"
Command3.Caption = "Print Image"
End Sub
Open Microsoft Paint, and then run the project.
Click the Print Screen button, switch to Paint, and press CTRL+V to paste the contents of the clipboard into Paint. The entire screen is pasted.
Click the Alt+Print Screen button, switch to Paint as before, and press CTRL+V again. Only the active window is pasted.
Click the Print Image button and the captured image will print (using a hidden PictureBox).