Access VBA - Como copiar a tela ou janela para a área de transferência a partir do Visual Basic - How To Capture and Print the Screen, a Form, or Any Window



Este artigo demonstra como programaticamente copiar a janela ativa ou a tela inteira para a área de transferência e imprimir a imagem.

Este artigo mostra como capturar qualquer formulário ou janela, incluindo a tela e colocá-lo em um objeto de imagem do Visual Basic. 

Se o único requisito for copiar a tela ou janela ativa para a área de transferência, chamar a API keybd_event teremos a mesma funcionalidade que combinação das teclas [ALT] + [PRINTSCRN] (copiar a janela ativa para a área de transferência) ou [PRINTSCRN] (copiar a tela para a área de transferência). Se também precisas imprimir a imagem, um controle PictureBox oculto pode fornecer essa funcionalidade.

Passo a passo
- Inicie um novo projeto Visual Basic Standard EXE. O Form1 é criado por padrão.

- Adicione três CommandButtons e um controle PictureBox ao Form1.

- Adicione o seguinte código na seção General Declarations do Form1:

Option Explicit

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
  bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Declare Function GetVersionExA Lib "kernel32" _
     (lpVersionInformation As OSVERSIONINFO) As Integer

Private Type OSVERSIONINFO
   dwOSVersionInfoSize As Long
   dwMajorVersion As Long
   dwMinorVersion As Long
   dwBuildNumber As Long
   dwPlatformId As Long
   szCSDVersion As String * 128
End Type

Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12

Dim blnAboveVer4 As Boolean

Private Sub Command1_Click()
   If blnAboveVer4 Then
keybd_event VK_SNAPSHOT, 0, 0, 0
   Else
keybd_event VK_SNAPSHOT, 1, 0, 0
   End If
End Sub

Private Sub Command2_Click()
   If blnAboveVer4 Then
keybd_event VK_SNAPSHOT, 1, 0, 0
   Else
keybd_event VK_MENU, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, 0, 0
keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
   End If
End Sub

Private Sub Command3_Click()
   ' Load the captured image into a PictureBox and print it
    Let Picture1.Picture = Clipboard.GetData()
   Printer.PaintPicture Picture1.Picture, 0, 0
   Printer.EndDoc
End Sub

Private Sub Form_Load()
   Dim osinfo As OSVERSIONINFO
   Dim retvalue As Integer

    Let osinfo.dwOSVersionInfoSize = 148
    Let osinfo.szCSDVersion = Space$(128)
    Let retvalue = GetVersionExA(osinfo)

   If osinfo.dwMajorVersion > 4 Then blnAboveVer4 = True

    Let Picture1.Visible = False
    Let Command1.Caption = "Print Screen"
    Let Command2.Caption = "Alt+Print Screen"
    Let Command3.Caption = "Print Image"
End Sub

- Abrir o Microsoft Paint e execute o projeto.

- Clique no botão Print Screen , alterne para o Paint e pressione CTRL+V para colar o conteúdo da área de transferência no Paint. A tela inteira é colada.

- Clique no botão ALT + PRINT SCREEN , alterne para Paint como antes e pressione CTRL+V novamente. Somente a janela ativa é colada.
- Clique no botão Imprimir imagem e a imagem capturada imprimirá (usando um PictureBox oculto).



Reference::
161299  Como captura e a tela, um formulário ou qualquer janela de impressão
189249  Como determinar qual versão do Windows de 32 bits está sendo usado
230502  How To Print a Form That is Too Large for the Screen or Page
178076  How To Use a PictureBox to Control Orientation Printing a Form
194580  How To Print a Composite Image From a RichTextBox
146022  How To Set Up the RichTextBox Control for WYSIWYG Printing

Tags: VBA, Access, transferência, clipboard, API, keybd_event, PRINTSCRN, PictureBox, ALT,



Inline image 1

Nenhum comentário:

Postar um comentário

diHITT - Notícias