荆门子陵菜市场:VB截屏(拷贝屏幕图像)代码

来源:百度文库 编辑:偶看新闻 时间:2024/04/25 01:04:44

 

一时对图片处理特别感兴趣.....下面就来转一篇有关于截屏的文章.
本文转自:http://im0518.blog.163.com/blog/static/2655641720071022101445585/

  1. 两种方法:感觉第一种方法来得直接一些

  2. 方法一:

  3. Private Declare Function GetDesktopWindow Lib "user32" () As Long
  4. Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
  5. Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
  6. 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
  7. Private Const SRCCOPY = &HCC0020

  8. Sub saveMyScreen(filePath As String)
  9. 'filePath为截屏要保存的路径
  10. Picture1.Width = Screen.Width
  11. Picture1.Height = Screen.Height
  12. Picture1.Visible = False

  13. Dim lngDesktopHwnd As Long
  14. Dim lngDesktopDC As Long

  15. Picture1.AutoRedraw = True
  16. Picture1.ScaleMode = vbPixels
  17. lngDesktopHwnd = GetDesktopWindow
  18. lngDesktopDC = GetDC(lngDesktopHwnd)

  19. Call BitBlt(Picture1.hdc, 0, 0, Screen.Width, Screen.Height, lngDesktopDC, 0, 0, SRCCOPY)
  20. Picture1.Picture = Picture1.Image
  21. Call ReleaseDC(lngDesktopHwnd, lngDesktopDC)
  22. SavePicture Picture1, filePath '保存图片
  23. End Sub

  24. 方法二:

  25. 'form中放一个按钮和一个图片框

  26. Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
  27. Const theScreen = 0
  28. Const theForm = 1

  29. Private Sub Command1_Click()
  30. Call keybd_event(vbKeySnapshot, theScreen, 0, 0)
  31. DoEvents
  32. Picture1.Picture = Clipboard.GetData(vbCFBitmap)
  33. End Sub

  34. 方法一修改后:

  35. Private Declare Function GetDesktopWindow Lib "user32" () As Long
  36. Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
  37. Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
  38. 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
  39. Private Const SRCCOPY = &HCC0020

  40. Sub saveMyScreen(filePath As String)

  41. Dim lngDesktopHwnd As Long
  42. Dim lngDesktopDC As Long

  43. Picture1.AutoRedraw = True
  44. Picture1.ScaleMode = vbPixels
  45. lngDesktopHwnd = GetDesktopWindow
  46. lngDesktopDC = GetDC(lngDesktopHwnd)

  47. 'filePath为截屏要保存的路径
  48. Me.Visible = False
  49. Me.WindowState = 2
  50. Picture1.Width = Screen.Width
  51. Picture1.Height = Screen.Height
  52. ' Picture1.Visible = False
  53. Call BitBlt(Picture1.hdc, 0, 0, Screen.Width, Screen.Height, lngDesktopDC, 0, 0, SRCCOPY)
  54. Picture1.Picture = Picture1.Image
  55. Call ReleaseDC(lngDesktopHwnd, lngDesktopDC)
  56. Me.Visible = True
  57. ' SavePicture Picture1, filePath '保存图片
  58. End Sub


  59. Private Sub Command1_Click()
  60. saveMyScreen "filePath"
  61. End Sub
复制代码