Hola, bien como dices que vas a correr el programa desde xp en adelante podes utilizar GDI+ con lo que no es nesesario utilizar ninguna Dll, (tambien existe clases para guardar jpg como las que te adjunto xKiz
te paso un ejemplo utilizando el protapapeles (aunque se puede evitar, pero por cuestiones de tiempo te paso esta que es un poco mas facil)
Option Explicit
Private Declare Function GdiplusStartup Lib "gdiplus" (Token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long
Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As Long
Private Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal Token As Long)
Private Declare Function GdipSaveImageToFile Lib "gdiplus" (ByVal image As Long, ByVal FileName As Long, ByRef clsidEncoder As GUID, ByRef encoderParams As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, id As GUID) As Long
Private Declare Function GdipCreateBitmapFromHBITMAP Lib "GdiPlus.dll" (ByVal mHbm As Long, ByVal mhPal As Long, ByRef mBitmap As Long) As Long
Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP As Long = &H2
Private Const VK_SNAPSHOT As Long = &H2C
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Type EncoderParameter
GUID As GUID
NumberOfValues As Long
type As Long
Value As Long
End Type
Private Type EncoderParameters
Count As Long
Parameter(15) As EncoderParameter
End Type
Private Type GdiplusStartupInput
GdiplusVersion As Long
DebugEventCallback As Long
SuppressBackgroundThread As Long
SuppressExternalCodecs As Long
End Type
Const ImageCodecJPG = "{557CF401-1A04-11D3-9A73-0000F81EF32E}"
Const EncoderQuality = "{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"
Const EncoderParameterValueTypeLong = 4
Public Function SaveSnapShopToFile(ByVal DestPath As String, Optional ByVal JPG_Quality As Long = 85) As Boolean
On Error Resume Next
Dim GDIsi As GdiplusStartupInput, gToken As Long, hBitmap As Long
Dim tEncoder As GUID
Dim tParams As EncoderParameters
Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
DoEvents
Call keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0)
If Not Clipboard.GetFormat(vbCFBitmap) Then Exit Function
If JPG_Quality > 100 Then JPG_Quality = 100
If JPG_Quality < 0 Then JPG_Quality = 0
CLSIDFromString StrPtr(ImageCodecJPG), tEncoder
With tParams
.Count = 1
.Parameter(0).NumberOfValues = 1
.Parameter(0).type = EncoderParameterValueTypeLong
.Parameter(0).Value = VarPtr(JPG_Quality)
CLSIDFromString StrPtr(EncoderQuality), .Parameter(0).GUID
End With
GDIsi.GdiplusVersion = 1&
GdiplusStartup gToken, GDIsi
If gToken Then
If GdipCreateBitmapFromHBITMAP(Clipboard.GetData(vbCFBitmap), 0, hBitmap) = 0 Then
If GdipSaveImageToFile(hBitmap, StrPtr(DestPath), tEncoder, ByVal tParams) = 0 Then
SaveSnapShopToFile = True
End If
GdipDisposeImage hBitmap
End If
GdiplusShutdown gToken
End If
End Function
Private Sub Form_Load()
If SaveSnapShopToFile("C:\SnapShop.jpg", 80) Then
MsgBox "Correcto!!! (dijo Susana Gimenes)"
End If
End Sub