Как сделать скриншот собственной формы - VB

Узнай цену своей работы

Формулировка задачи:

Требуется сделать самоскриншот активной формы проги? Это возможно? Я только видел примеры скриншота всего рабочего стола...
Нет вариантов? Нужно отскринить активное поле приложения, вроде бы где-то читал, что можно сделать средствами Vb...
Все нашел в сети вот такое решение:
Листинг программы
  1. Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
  2. Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
  3. Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
  4. Private Declare Function EmptyClipboard Lib "user32" () As Long
  5. Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
  6. Private Declare Function CloseClipboard Lib "user32" () As Long
  7. Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
  8. Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
  9. 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
  10. Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As DEVMODE) As Long
  11. Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
  12. Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
  13. Private Declare Function GetDesktopWindow Lib "user32" () As Long
  14. Private Const CCHDEVICENAME = 32
  15. Private Const CCHFORMNAME = 32
  16. Private Type RECT
  17. Left As Long
  18. Top As Long
  19. Right As Long
  20. Bottom As Long
  21. End Type
  22. Private Type DEVMODE
  23. dmDeviceName As String * CCHDEVICENAME
  24. dmSpecVersion As Integer
  25. dmDriverVersion As Integer
  26. dmSize As Integer
  27. dmDriverExtra As Integer
  28. dmFields As Long
  29. dmOrientation As Integer
  30. dmPaperSize As Integer
  31. dmPaperLength As Integer
  32. dmPaperWidth As Integer
  33. dmScale As Integer
  34. dmCopies As Integer
  35. dmDefaultSource As Integer
  36. dmPrintQuality As Integer
  37. dmColor As Integer
  38. dmDuplex As Integer
  39. dmYResolution As Integer
  40. dmTTOption As Integer
  41. dmCollate As Integer
  42. dmFormName As String * CCHFORMNAME
  43. dmUnusedPadding As Integer
  44. dmBitsPerPel As Integer
  45. dmPelsWidth As Long
  46. dmPelsHeight As Long
  47. dmDisplayFlags As Long
  48. dmDisplayFrequency As Long
  49. End Type
  50. Public Sub Capture(control_hWnd As Long, fNAME As String, Optional OnlyToClipBoard As Boolean = False)
  51. On Error GoTo ErrorCapture
  52. Dim sp As RECT, x As Long
  53. If fNAME <> "" Then
  54. x = GetWindowRect(control_hWnd, sp)
  55. ScrnCap sp.Left, sp.Top, sp.Right, sp.Bottom
  56. If OnlyToClipBoard = False Then
  57. SavePicture Clipboard.GetData, fNAME
  58. End If
  59. End If
  60. Exit Sub
  61. ErrorCapture:
  62. MsgBox Err & ":Error in Caputre(). Error Message:" & Err.Description, vbCritical, "Warning"
  63. Exit Sub
  64. End Sub
  65. Private Sub ScrnCap(Lt, Top, Rt, Bot)
  66. On Error GoTo ErrorScrnCap
  67. Dim rWIDTH As Long, rHEIGHT As Long
  68. Dim SourceDC As Long, DestDC As Long, bHANDLE As Long, Wnd As Long
  69. Dim dHANDLE As Long, dm As DEVMODE
  70. rWIDTH = Rt - Lt
  71. rHEIGHT = Bot - Top
  72. SourceDC = CreateDC("DISPLAY", 0&, 0&, dm)
  73. DestDC = CreateCompatibleDC(SourceDC)
  74. bHANDLE = CreateCompatibleBitmap(SourceDC, rWIDTH, rHEIGHT)
  75. SelectObject DestDC, bHANDLE
  76. BitBlt DestDC, 0, 0, rWIDTH, rHEIGHT, SourceDC, Lt, Top, &HCC0020
  77. Wnd = 0
  78. OpenClipboard Wnd
  79. EmptyClipboard
  80. SetClipboardData 2, bHANDLE
  81. CloseClipboard
  82. DeleteDC DestDC
  83. ReleaseDC dHANDLE, SourceDC
  84. Exit Sub
  85. ErrorScrnCap:
  86. MsgBox Err & ":Error in ScrnCap(). Error Message:" & Err.Description, vbCritical, "Warning"
  87. Exit Sub
  88. End Sub
  89. Public Sub CaptureDesktop()
  90. On Error GoTo ErrorCaptureDesktop
  91. Dim dhWND As Long, sp As RECT, x As Long
  92. dhWND = GetDesktopWindow
  93. If dhWND <> 0 Then
  94. x = GetWindowRect(dhWND, sp)
  95. ScrnCap sp.Left, sp.Top, sp.Right, sp.Bottom
  96. End If
  97. Exit Sub
  98. ErrorCaptureDesktop:
  99. MsgBox Err & ":Error in CaptureDesktop. Error Message: " & Err.Description, vbCritical, "Warning"
  100. Exit Sub
  101. End Sub
  102. Private Sub Form_Load()
  103. Command1.Caption = "Экран"
  104. Command2.Caption = "Форма"
  105. Command3.Caption = "Кнопка"
  106. Command4.Caption = "Текстовое окно"
  107. End Sub
  108. Private Sub Command1_Click()
  109. On Error Resume Next
  110. Call CaptureDesktop
  111. SavePicture Clipboard.GetData, "C:\1\desktop.bmp"
  112. MsgBox "Картинка экрана сохранена в C:\1\desktop.bmp"
  113. End Sub
  114. Private Sub Command2_Click()
  115. On Error Resume Next
  116. Call Capture(Me.hwnd, "C:\1\form.bmp")
  117. MsgBox "Картинка формы сохранена в C:\1\form.bmp"
  118. End Sub
  119. Private Sub Command3_Click()
  120. On Error Resume Next
  121. Call Capture(Me.Command1.hwnd, "C:\1\button.bmp")
  122. MsgBox "Картинка кнопки сохранена в C:\1\button.bmp"
  123. End Sub
  124. Private Sub Command4_Click()
  125. On Error Resume Next
  126. Call Capture(Me.Dir1.hwnd, "C:\1\drv.bmp")
  127. MsgBox "Картинка DriveListBox сохранена в C:\1\drv.bmp"
  128. End Sub
Вопрос а как привезать сохранение файла к CommonDialog, то есть как необходимо преобразовать строку:
Листинг программы
  1. Call Capture(Me.hwnd, "C:\1\form.bmp")

Решение задачи: «Как сделать скриншот собственной формы»

textual
Листинг программы
  1. Private Sub Command3_Click()
  2. On Error Resume Next
  3. CommonDialog1.ShowSave
  4. Call Capture(Me.Command3.hwnd, CommonDialog1.FileName & ".bmp")
  5. MsgBox "Картинка кнопки сохранена в " & CommonDialog1.FileName & ".bmp"
  6. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы