Originariamente inviato da Paco.Baldacci
ciao gibra.
ho questo codice che usa proprio quel metodo:
---------------------
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const VK_SNAPSHOT = &H2C
Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Private Sub Command1_Click()
Dim picTmp As PictureBox
Dim CaptPic As StdPicture
Dim pt As POINTAPI
Dim Px As Long
Dim Py As Long
Dim pW As Long
Dim pH As Long
If frmStampa.Picture3 <> 0 Then
Clipboard.Clear
keybd_event VK_SNAPSHOT, 0, 0, 0
DoEvents
Set CaptPic = Clipboard.GetData()
ClientToScreen Picture3.hWnd, pt
Px = pt.x * Screen.TwipsPerPixelX
Py = pt.y * Screen.TwipsPerPixelY
pW = Picture3.ScaleWidth
pH = Picture3.ScaleHeight
Set picTmp = Me.Controls.Add("VB.PictureBox", "tmp")
picTmp.Width = Picture3.Width
picTmp.Height = Picture3.Height
picTmp.AutoRedraw = True
picTmp.PaintPicture CaptPic, 0, 0, pW, pH, Px, Py, pW, pH
'SavePicture picTmp.Image, "C:\ImmagineSalvata.bmp"
'...stampa
Me.Controls.Remove ("tmp")
Set picTmp = Nothing
End If
End Sub
---------------------
ma non dà l'esito previsto. Ossia se lo lancio e poi provo a incollare l'immagine che ho catturato, con il codice riportato, in un programma di grafica (paint di windows) mi si ripropone tutto lo schermo catturato e non solo la picture che mi serve. Cioè, credo che non effettui il crop in memoria insomma.