Что нового

Утечка памяти при использовании UDF BmpSearch

ololowik

Новичок
Сообщения
2
Репутация
0
Такая проблема: нашел полезную инфу по поиску картинки. запилил себе в скрпит. вроде всё просто, проверил экран - нашел - щелкнул. но через минут 7 начинает лагать всё, через 10 вылетает с ошибкой, что у компа не хватает памяти. Как такое обойти? Чем вызвано? Как можно очищать память?

код скрипта
Код:
#include <ScreenCapture.au3>
#include "BmpSearch.au3"

HotKeySet("{ESC}", "_Terminate")

Opt("MouseClickDownDelay", 50)
Opt("MouseClickDelay", 50)

$left_x = 0
$left_y = 0
$i = 0
;ищем и задаём начальные координаты. картинка должна быть левой!
_GDIPlus_Startup()

$hSource = _ScreenCapture_Capture()
$hBmp = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\test.bmp")
$hFind = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp)

$aCoords = _BmpSearch($hSource, $hFind, 1)

If @error Then
  ConsoleWrite("Не найдено" & @CRLF)
Else
  $left_x = $aCoords[1][2]
  $left_y = $aCoords[1][3]
EndIf

Example()

Func Example()
    While 1
	  Do
		 _GDIPlus_Startup()

		 $hSource = _ScreenCapture_Capture()
		 $hBmp = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\test.bmp")
		 $hFind = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp)

		 $aCoords = _BmpSearch($hSource, $hFind, 1)

		 If @error Then
		   MouseClick("left",$left_x + 60,$left_y + 120,1,2) ;reroll
		   sleep(100)
		 Else
			If $aCoords[1][2] = $left_x Then
			   MouseClick("left",$left_x + 20,$left_y + 10,1,2) ;левая ячейка
			   sleep(100)
			   MouseClick("left",$left_x + 60,$left_y + 200,1,2) ;кнопка покупки
			   sleep(100)
			ElseIf $aCoords[1][2] = $left_x + 60 Then
			   MouseClick("left",$left_x + 80,$left_y + 10,1,2) ;средняя ячейка
			   sleep(100)
			   MouseClick("left",$left_x + 60,$left_y + 200,1,2)
			   sleep(100)
			ElseIf $aCoords[1][2] = $left_x + 120 Then
			   MouseClick("left",$left_x + 140,$left_y + 10,1,2) ;правая ячейка
			   sleep(100)
			   MouseClick("left",$left_x + 60,$left_y + 200,1,2)
			   sleep(100)
			EndIf
		 EndIf
		 sleep(100)
		 $i+=1
	 Until $i = 200
	 sleep(30000)
	 $i = 0
    WEnd
 EndFunc

 Func _Terminate()
    Exit
EndFunc   ;==>_Terminate
 
A

Alofa

Гость
ololowik сказал(а):
... Как такое обойти?..
Созданием новой темы в Столе заказов (это бесплатно). ;)

ololowik сказал(а):
... Чем вызвано?..
Вашим нежеланием, перед тем как "запиливать" куски кода в свой скрипт, поинтересоваться в справке о функциях входящих в эти самые куски.

P.s: Так ведь можно и компьютер сломать.
 
Автор
O

ololowik

Новичок
Сообщения
2
Репутация
0
решил, дописав
Код:
_WinAPI_DeleteObject ($hSource)
_GDIPlus_BitmapDispose ($hBmp)
_ScreenCapture_SaveImage (@tempdir & "\test.bmp", $hFind, True) ; True -> $hBMP destroyed
_GDIPlus_ShutDown ()
 
Верх