刚才没试,现在试了一下,发现还是不对啊,我要的不是这个效果的截图
我想要的是不包括窗口框架的截图,只是网 ...
lon91ong 发表于 2011-1-2 17:27
拜读了一下lanfengc大侠的那个贴子,改了一下返回值.
下这的这个代码应该是你要的
运行结果如图:
代码:
#include <winapi.au3>
#include <GdiPlus.au3>
$Hwnd = WinGetHandle("Google - Chromium", "");Chrom句柄
_WinAPI_PrintScreenWithHwnd($Hwnd, 551, 288, 188, 33)
Func _WinAPI_PrintScreenWithHwnd($Hwnd, $iLeft = 0, $iTop = 0, $iWidth = @DesktopWidth, $iHeight = @DesktopHeight, $iFormat = $GDIP_PXF32RGB)
;参数:
;$Hwnd 目标窗口句柄.$sFileName(可选),要保存的文件路径,默在脚本目录
;$iLeft X座标的距离.
;$iTop Y座标的距离.
;$iWidth, 图片的宽度
;$iHeight 图片的高度
;$iFormat 图片的色深
;具体定义参考_GDIPlus_BitmapCloneArea()
;--------------------------
;返回值:
;成功,返回位图句柄
;失败,返回值为0,说明目标窗口被最小化,返回值为-1,说明给定的句柄不是一个有效的windows窗口.返回值为-2,说明目标窗口不可绘
If IsIconic($Hwnd) Then Return SetError(-1, 0, 0)
If Not (_WinAPI_IsWindow($Hwnd)) Then Return SetError(-2, 1, -1)
_GDIPlus_Startup()
$hDC = _WinAPI_GetDC($Hwnd)
$hBMP = _WinAPI_CreateCompatibleBitmap($hDC, _WinAPI_GetWindowWidth($Hwnd), _WinAPI_GetWindowHeight($Hwnd)) ;创建位图,大小为目标窗口的高度及宽度
$memDC = _WinAPI_CreateCompatibleDC($hDC)
_WinAPI_SelectObject($memDC, $hBMP)
_WinAPI__PrintWindow($Hwnd, $memDC, 0)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
If @error Then Return SetError(-3, 2, -2)
$hClone = _GDIPlus_BitmapCloneArea($hImage, $iLeft, $iTop, $iWidth, $iHeight, $iFormat)
_GDIPlus_ImageSaveToFile($hClone, @ScriptDir & "\截图.png") ;保存图片
;_GDIPlus_ImageDispose($hClone)
_GDIPlus_ImageDispose($hImage)
_WinAPI_ReleaseDC($Hwnd, $hDC)
_WinAPI_DeleteDC($memDC)
_GDIPlus_Shutdown()
Return SetError(0, 2, $hClone);返回位图句柄
EndFunc ;==>_WinAPI_PrintScreenWithHwnd
Func _WinAPI__PrintWindow($Hwnd, $hDC, $nFlags = 0)
Local $aResult = DllCall("user32.dll", "bool", "PrintWindow", "hwnd", $Hwnd, "handle", $hDC, "int", $nFlags)
If @error Then Return SetError(@error, @extended, 0)
Return $aResult[0]
EndFunc ;==>_WinAPI__PrintWindow
Func IsIconic($Hwnd)
Local $nResult = DllCall("user32.dll", "int", "IsIconic", "hwnd", $Hwnd)
Return $nResult[0]
EndFunc ;==>IsIconic
|