Private Sub CaptureWindow(ByVal hSRC As Long, ByVal szName As String, Optional ByVal OnlyClient As Boolean = True)
    Dim r As RECT
    If OnlyClient Then
        GetClientRect hSRC, r
    Else
        GetWindowRect hSRC, r
    End If
    CaptureWindowRect hSRC, szName, 0, 0, r.Right - r.Left, r.Bottom - r.Top
End SubPrivate Sub CaptureWindowRect(ByVal hSRC As Long, ByVal szName As String, ByVal x As Long, ByVal y As Long, ByVal w As Long, ByVal h As Long)
    picDEST.ScaleMode = 3
    picDEST.Parent.ScaleMode = 3
    picDEST.AutoRedraw = True    picDEST.Width = w
    picDEST.Height = h
    Dim hSRCDC As Long
    hSRCDC = GetDC(hSRC)
    BitBlt picDEST.hdc, 0, 0, w, h, hSRCDC, x, y, vbSrcCopy
    ReleaseDC hSRC, hSRCDC
    Set imgPreview.Picture = picDEST.Image
    
    On Error GoTo InvDirName
    SavePicture picDEST.Image, szName
    Exit Sub
InvDirName:
    MsgBox "无效目录或文件名!无法保存抓图!", vbCritical, "抓图"
    
End Sub

解决方案 »

  1.   

    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 Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As LongPrivate Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End Type