En fait j'ai placé
en début de fonction, et _GDIPlus_ShutDown en fin.
Le résultat est assez surprenant :
Avant le processus qui 'enflait' étais le gestionnaire de fenetres, ce qui est logique : je créais un widget sans le detruire.
Maintenant, l'utilisation de la RAM augmente, mais sans qu'aucune utilisation 'RAM' d'aucun processus n'augmente.
En gros le total augmente sans qu'aucun processus ne 'gonfle' ....
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
#include <ScreenCapture.au3>
#include <Timers.au3>
Global const $Titre = "EU Logger";
Global Const $Ver = "0.01a";
Global Const $Largeur = 400;
Global Const $Hauteur = 400;
Global const $TitreEU = "Entropia Universe";
Global $EntropiaHandle = 0;
Global $EntropiaPosX = 0;
Global $EntropiaPosY = 0;
Global $EntropiaTailleX = 0;
Global $EntropiaTailleY = 0;
global $hGraphic;
$MainWindow = GUICreate($Titre & $Ver, $Largeur, $Hauteur);
$Console = GUICtrlCreateEdit( $Titre & "V. " & $Ver, 0, 190, 400, 200);
GUISetState()
_GDIPlus_Startup ()
Console( "Demarrage .....");
Console( "Recherche de la fenetre : ");
RechercheFenetreEntropia()
_Timer_SetTimer($MainWindow,100,"ImageCapture")
while 1
$nMSG = GUIGetMsg()
Switch $nMSG
Case $GUI_EVENT_CLOSE
Fin()
EndSwitch
WEnd
Func ImageCapture($a, $b, $c , $d)
_GDIPlus_Startup ()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND ($Mainwindow)
$hBMP = _ScreenCapture_Capture ("", $EntropiaPosX, $EntropiaPosY, $EntropiaTailleX, $EntropiaTailleY)
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP ($hBMP)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, 400, 200)
_GDIPlus_ImageDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
EndFunc
Func RechercheFenetreEntropia()
$EntropiaSize = WinGetPos ($TitreEU)
if @error = 1 Then
Console ("Pas de fenetre trouvée")
Fin()
EndIf
Console ( "Fenetre Trouvée ..." )
$EntropiaPosX = $EntropiaSize[0]
$EntropiaPosY = $EntropiaSize[1]
$EntropiaTailleX = $EntropiaSize[2]
$EntropiaTailleY = $EntropiaSize[3]
Console (" Taille : " & $EntropiaTailleX & "/" & $EntropiaTailleY )
Console (" Pos : " & $EntropiaPosX & ":" & $EntropiaPosY)
EndFunc
Func Console($a_ecrire)
GUICtrlSetData($Console, @CRLF & $a_ecrire, 1);
EndFunc
Func Fin()
; Procedure de fin de programme
Exit
EndFunc
Le problème viendrait de $hBMP. Quand je fais un _GDIPlus_BitmapDispose($hBMP), le script plante. De plus, quand je ne fais pas la conversion Bitmap -> hBitmap, il n'y a pas de fuite mémoire...