辅导:VB抓屏保存为文件实现代码
来源:优易学  2011-9-30 13:17:14   【优易学:中国教育考试门户网】   资料下载   IT书店

  Public Function CopyScreenToBMP(ByVal szfile As String) As Boolean
   Dim w As Long, h As Long
   Dim scrDC As Long
   Dim DIB As Long, m_DC As Long
   Dim BmpInfo As BITMAPINFOHEADER
   Dim BmpFileHead As BITMAPFILEHEADER
   Dim pData As Long
   Dim buff() As Byte
   Dim old As Long
   Dim L As Long
    \'取屏幕 高宽
    w = Screen.Width \\ 15
    h = Screen.Height \\ 15
    \'准备内存DC
    m_DC = CreateCompatibleDC(0&)
    If m_DC = 0 Then
    CopyScreenToBMP = False
    Exit Function
    End If
    \'填充DIB的BMP结构
    With BmpInfo
    .biBitCount = 24
    .biPlanes = 1
    .biHeight = h
    .biWidth = w
    .biSize = 40 \'本结构长度
    End With
  DIB = CreateDIBSection(m_DC, BmpInfo, DIB_RGB_COLORS, pData, 0, 0)
    If DIB = 0 Then
    DeleteDC m_DC
    CopyScreenToBMP = False
    Exit Function
    End If
  old = SelectObject(m_DC, DIB)
    \'拷屏
    scrDC = GetDC(0)
    BitBlt m_DC, 0, 0, w, h, scrDC, 0, 0, SRCCOPY
  \'补足4的倍数
    L = (w * 3 + 3) And &H7FFFFFFC
    L = L * h
    \'分配内存
    ReDim buff(1 To L) As Byte
  \'取像素数据
    CopyMemory VarPtr(buff(1)), pData, L
  \'释放资源
    SelectObject m_DC, old
    DeleteObject DIB
    DeleteDC m_DC
    ReleaseDC 0, scrDC
    \'填充BMPFILE
  With BmpFileHead
    \'BM标志
    .bfType(0) = 66: .bfType(1) = 77
    .bfSize = 54 + L \'本文件大小
    .bfOffBits = 54 \'像素数据偏移地址
    End With
  \'写入文件
    \'懒得声明变量,直接用 L 存放文件号
    L = FreeFile()
    Open szfile For Binary As L
    \'写入文件头
    Put L, 1, BmpFileHead
    Put L, , BmpInfo
    \'写入实际像素
    Put L, , buff()
    Close L
  CopyScreenToBMP = True
  End Function
  \'
  \'例程
  Option Explicit
  Private Sub cmdTest_Click()
   Dim OK As Boolean
    OK = CopyScreenToBMP(\"c:\\test.bmp\")
    If OK Then
    Set Me.Picture = LoadPicture(\"c:\\test.bmp\")
    Else
    MsgBox \"CAO,拷屏失败了~\"
    End If
  End Sub

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训