Вот пример, из статьи на сайте, может поможет, незнаю.
'Объявляем в General Form1:
Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Dim A As Integer
'в Properties Form1 устанавливаем BorderStyle в 0-None, для того, чтобы в
'момент получения «фотографии» экрана, детали формы не попали в «кадр»
Private Sub Form_Load()
'делаем форму невидимой, но при этом оставляем активными все 'компоненты
Form1.Height = 0
Timer1.Interval = 1
'очищаем Clipboard
Clipboard.Clear
'копируем изображение экрана
keybd_event vbKeySnapshot, 1, 0&, 0&
End Sub
Private Sub Timer1_Timer()
A = A + 1
If A = 2 Then
'вклеиваем изображение в картинку
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
'задаём размеры формы и картинки
Form1.Width = Screen.Width * 0.8
Form1.Height = Screen.Height * 0.8
Form1.Left = (Screen.Width - Width) / 2
Form1.Top = (Screen.Height - Height) / 2
Picture1.Height = Form1.ScaleHeight * 1
Picture1.Width = Form1.ScaleWidth * 1
Picture1.Left = (Form1.Width - Picture1.Width) / 2
Picture1.Top = (Form1.Height - Picture1.Height) / 2
End If
If A = 2 Then
'очищаем Clipboard
Clipboard.Clear
'выключаем Timer1
Timer1.Enabled = False
End If
End Sub
'для выхода из программы
Private Sub Picture1_Click()
End
End Sub
Охренительный способ копирования экрана...
Вот порадуется пользователь, у которого в буфере обмена кусок несохранённого текста в половину дипломной работы...
Скопировать спрятанную часть DC нельзя по причине отсутствия таковой. Винда не рисует за пределами экрана, оптимизация у неё такая. А перекрытую - можно, но увидишь то, что её перекрыло.
Единственный вариант - делать окно поверх всех, снимать и отправлять обратно.
Поставь окно TOPMOST, и чтобы было в пределах экрана, попытайся спрятать все дочерние окна, чтобы не мешали (ShowWindow+SW_HIDE), сфотографируешь, затем покажешь снова спрятанные дочерние окна.
А вот такой примерчик, только для экрана:
Получить изображение экрана.
Функция, которая реализует эту возможность - GetDesktopWindow. Полный код выглядит так.
Это поместить в область деклараций модуля
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Public 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
Public Const SRCCOPY = &HCC0020
Код, копирующий изображение экрана в окно. Размещается в форме. Не забудьте свойство формы AutoRedraw установить в True.
 im hDesk, hDeskDC
hDesk = GetDesktopWindow()
hDeskDC = GetDC(hDesk)
BitBlt Me.hDC, 0, 0, Width, Height, hDeskDC, 0, 0, SRCCOPY
Если необходимо изображение поместить в Picture, вместо Me.hDC укажите Picture1.hDC.