学习后可以保存当前活动窗口截图,但如何保存win10黏贴板里的截图?
如保存当前活动窗口截图:
=myjt(_screen.hwnd,"_screen.bmp")
如保存当前VFP_窗口截图:
=myjt(_vfp.hwnd,"_vfp.jpg")
如何保存操作系统黏贴板里的截图?尝试=myjt(_cliptext,"_vfp.jpg")无效
PROCEDURE myjt(hwnd,tcFile)
LOCAL cFileExtName, cEncoder, iInputBuf, iResult, hDesktopDc, hVDc, hBitmap, hToken, hGdipBitmap,encoderClsid,lprect,x4,y4,abc
m.cFileExtName =LOWER( JUSTEXT( m.tcFile ))
ERASE (tcfile)
DECLARE INTEGER GetDC IN user32 INTEGER hwnd
Declare SHORT GetWindowRect IN user32 INTEGER hwnd, STRING @ lpRect
DECLARE Long ReleaseDC IN WIN32API
Long hWnd, Long hDc
DECLARE Long CreateCompatibleDC IN WIN32API
Long hDc
DECLARE Long DeleteDC IN WIN32API
Long hDc
DECLARE Long CreateCompatibleBitmap IN WIN32API
Long hDc, Long nWidth, Long nHeight
DECLARE Long SelectObject IN WIN32API
Long hDc, Long hObject
DECLARE Long DeleteObject IN WIN32API
Long hObject
DECLARE Long GdiplusStartup IN gdiplus Long @ token, String @ inputbuf, Long @ outputbuf
DECLARE Long GdiplusShutdown IN gdiplus
Long token
DECLARE Long GdipCreateBitmapFromHBITMAP IN gdiplus
Long hbitmap, Long hpalette, Long @ hGpBitmap
DECLARE Long GdipDisposeImage IN gdiplus
Long image
DECLARE Long GdipSaveImageToFile IN gdiplus Long nImage, String FileName,String @ clsIdEncoder, Long encoderParams
DECLARE INTEGER CLSIDFromString IN ole32 STRING lpsz, STRING @pclsid
DECLARE INTEGER PrintWindow IN user32 INTEGER,INTEGER,INTEGER
Declare Long GdipCreateBitmapFromScan0 in GdiPlus.dll ;
Integer width, Integer height, Integer stride, Long format, Long scan0, Long @ bitmap
Declare Long GdipGetImageGraphicsContext in GdiPlus.dll
Long image, Long @ graphics
DECLARE LONG GdipDeleteGraphics IN GDIPLUS LONG graphics
Declare Long GdipDrawImageRectI in GdiPlus.dll ;
Long graphics, Long image, Integer x, Integer y, Integer width, Integer height
lpRect=REPLICATE(CHR(0),16)
= GetWindowRect(Hwnd,@lpRect)
x4=ctobin(SUBSTR(lpRect,9,4),'4rs')-ctobin(SUBSTR(lpRect,1,4),'4rs')
y4=ctobin(SUBSTR(lpRect,13,4),'4rs')-ctobin(SUBSTR(lpRect,5,4),'4rs')
m.hDesktopDc = GetDC( m.hWnd )
m.hVdc = CreateCompatibleDC( m.hDesktopDc )
m.hBitmap = CreateCompatibleBitmap( m.hDesktopDc,x4,y4 )
ABC=SelectObject( m.hVdc, m.hBitmap )
=PrintWindow(m.hWnd,m.hVdc,0)
m.hToken = 0
m.iInputBuf = PADR(CHR(1), 16, CHR(0))
m.iResult = -1
IF ( 0 == GdiplusStartup( @ m.hToken, @ m.iInputBuf, 0 ))
m.hGdipBitmap = 0
IF ( 0 == GdipCreateBitmapFromHBITMAP(m.hBitmap, 0, @ m.hGdipBitmap ))
lnFormat=0x00021808
&&24
graphics = 0
resizedImage = 0
=GdipCreateBitmapFromScan0(x4,y4, 0, m.lnFormat, 0, @resizedImage)
=GdipGetImageGraphicsContext(m.resizedImage, @graphics)
=GdipDrawImageRectI(m.graphics, m.hGdipBitmap,0,0,x4,y4)
m.encoderClsid
= "{557CF40"+chr(47+(at(m.cFileExtName,"bmpjpggif
tifpng")+2)/3)+"-1A04-11D3-9A73-0000F81EF32E}"
cEncoder= REPLICATE(CHR(0),16)
CLSIDFromString(STRCONV(m.encoderClsid + CHR(0), 5), @cEncoder)
m.iResult = GdipSaveImageToFile(m.resizedImage,STRCONV( m.tcFile+CHR(0), 5 ), @ m.cEncoder, 0 )
GdipDeleteGraphics(graphics)
GdipDisposeImage(m.resizedImage)
GdipDisposeImage( m.hGdipBitmap )
ENDIF
GdiplusShutdown( m.hToken )
ENDIF
DeleteObject( m.abc)
DeleteObject( m.hBitmap )
DeleteDC( m.hVdc )
ReleaseDC( 0, m.hDesktopDc )
调用方法:=myjt(窗口句柄,欲保存的图像全称)
如:=myjt(_screen.hwnd,"_screen.bmp")
=myjt(_vfp.hwnd,"_vfp.jpg")