小弟想保存当前屏幕。
比如:在form上有个按钮。当我点击这个按钮的时候就系统就把当前窗口保存下来,然后自动弹出保存对话框,输入保存文件的名称和选择路径后点对话框上的“保存”按钮就可以把当前窗口以图像文件格式保存到选择的路径下。
请大虾务必指教阿。小弟先谢过大虾

解决方案 »

  1.   

    Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As LongPrivate Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function EmptyClipboard Lib "user32" () As LongPrivate Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, _
        ByVal hMem As Long) As LongPrivate Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, _
        ByVal hObject As Long) As LongPrivate Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As LongPrivate 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 LongPrivate Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As LongPrivate Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, _
        ByVal nWidth As Long, ByVal nHeight As Long) As LongPrivate Declare Function CloseClipboard Lib "user32" () As LongPrivate Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, _
        ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Long) As LongPrivate Sub Command1_Click()'''抓图
      Me.Visible = False
      SourceDC = CreateDC("DISPLAY", 0, 0, 0)
      DestDC = CreateCompatibleDC(SourceDC)
      Bhandle = CreateCompatibleBitmap(SourceDC, 800, 600)
      SelectObject DestDC, Bhandle
      BitBlt DestDC, 0, 0, 800, 600, SourceDC, 0, 0, &HCC0020
      Wnd = Screen.ActiveForm.hwnd
      OpenClipboard Wnd
      EmptyClipboard
      SetClipboardData 2, Bhandle
      CloseClipboard
      DeleteDC DestDC
      ReleaseDC Dhandle, SourceDC
      Me.Picture = Clipboard.GetData()
      Me.Visible = True
    End SubPrivate Sub Command2_Click()
      Me.Picture = Me.Image
      '保存捕捉的图片
      CommonDialog1.Filter = "BMP文件(*.bmp)|*.bmp|JPG文件(*.jpg)|*.jpg"
      CommonDialog1.ShowSave
      CommonDialog1.Flags = &H2 + &H4 + &H8
      If CommonDialog1.FileName <> "" Then
         SavePicture Me.Picture, CommonDialog1.FileName
      End If
    End Sub
      

  2.   

    Const VK_SNAPSHOT As Byte = &H2C
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Sub Command1_Click()
        Call keybd_event(VK_SNAPSHOT, 0, 0, 0) ' 把应用窗口图象放到剪贴板,相当于按下了键盘上的 Alt+PrintScr
        DoEvents
        CommonDialog1.Filter = "位图文件(*.bmp)|*.bmp|"
        CommonDialog1.ShowSave
        If CommonDialog1.FileName <> "" Then
            SavePicture Clipboard.GetData, CommonDialog1.FileName     '保存捕捉的图片
            Shell "C:\Program Files\Accessories\MSPAINT.EXE " & CommonDialog1.FileName, vbNormalFocus '用画图程序打开刚才保存的图片进行察看
        End If
    End Sub