Code : Tout sélectionner
#include <GDIPlus.au3>
#include <Memory.au3>
#include <ScreenCapture.au3>
Opt("MustDeclareVars", 1)
Func _ScreenToBin($iLeft="",$iTop="",$iRight=-1,$iBottom=-1,$fCursor=True)
Local $hBmp,$hBitmap,$sEncoderCLSID,$tEncoderCLSID,$pEncoderCLSID,$pStream, _
$hMem,$iSize,$pMem,$tData,$xData
$hBmp = _ScreenCapture_Capture("",$iLeft,$iTop,$iRight,$iBottom,$fCursor)
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBmp)
_WinAPI_DeleteObject($hBmp)
$sEncoderCLSID = _GDIPlus_EncodersGetCLSID("jpg")
$tEncoderCLSID = _WinAPI_GUIDFromString($sEncoderCLSID)
$pEncoderCLSID = DllStructGetPtr($tEncoderCLSID)
$pStream = _WinAPI_CreateStreamOnHGlobal(0)
_GDIPlus_ImageSaveToStream($hBitmap, $pStream, $pEncoderCLSID)
_GDIPlus_BitmapDispose($hBitmap)
$hMem = _WinAPI_GetHGlobalFromStream($pStream)
$iSize = _MemGlobalSize($hMem)
$pMem = _MemGlobalLock($hMem)
$tData = DllStructCreate("byte[" & $iSize & "]", $pMem)
$xData = DllStructGetData($tData, 1) ;JPG file in binary format
_MemGlobalFree($hMem)
Return $xData
EndFunc
_GDIPlus_Startup()
Local $T0=TimerInit()
Local $testBin=_ScreenToBin()
MsgBox(0,'',TimerDiff($T0))
$T0=TimerInit()
FileWrite(@ScriptDir&"\test.jpg",$testBin)
MsgBox(0,'',TimerDiff($T0))
_GDIPlus_Shutdown()
Func _GDIPlus_ImageSaveToStream($hImage, $pStream, $pEncoder, $pParams = 0)
Local $aResult = DllCall([color=#FF0000]$ghGDIPDll[/color], "uint", "GdipSaveImageToStream", "ptr", $hImage, "ptr", $pStream, "ptr", $pEncoder, "ptr", $pParams)
If @error Then Return SetError(1, 0, 0)
[color=#FF0000]Return SetError($aResult[0] <> 0, 0, $aResult[0] = 0)[/color]
EndFunc
Func _WinAPI_CreateStreamOnHGlobal($hGlobal, $fDeleteOnRelease = 1)
Local $aResult = DllCall("ole32.dll", "uint", "CreateStreamOnHGlobal", "ptr", $hGlobal, "bool", $fDeleteOnRelease, "ptr*", 0)
If @error Or $aResult[0] Then Return SetError(1, 0, 0)
Return $aResult[3]
EndFunc
Func _WinAPI_GetHGlobalFromStream($pStream)
Local $aResult = DllCall("ole32.dll", "uint", "GetHGlobalFromStream", "ptr", $pStream, "ptr*", 0)
If @error Or $aResult[0] Then Return SetError(1, 0, 0)
Return $aResult[2]
EndFunc