Что нового

Скрипт поедает память. Как это избежать?

DemoTiVatoR

Новичок
Сообщения
2
Репутация
0
Я только начинаю осваивать язык autoit, и мне довелось работать с bmpsearch.au3.
Задача вот в чем:
Если две картинки "1.bmp" и "2.bmp" появляются на экране, то необходимо сделать кое-какие действия.
Скрипт работает. Кусок, который прикреплен тоже работает, но через какое-то время скрипт прерывается, и выдает ошибку, что-то о нехватке памяти, и в то же время диск С заполнен неизвестно чем. Я запускаю скрипт на виртуальной машине, у которой свободно 5гб места, и минут за 10 скрипт полностью заполняет диск С.
Мне кажется, что тут необходимо как-то очищать переменные или что-то в этом роде, гуглил, пробовал, не получилось.
Как можно переписать код, избежав эту проблему?

Код:
_GDIPlus_Startup()
		$hBmp = _ScreenCapture_Capture()
		$hBitmap = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\1.bmp")
		$hFind = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp)

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

		If Not @error Then
			  _GDIPlus_Startup()

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

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

			If Not @error Then
			MouseMove(1888,585,1)
			MouseClick("LEFT")
			Sleep(3000)
			MouseMove(1265,949,1)
			MouseClick("RIGHT")
			Sleep(100)
			Send("{PAUSE}")

			EndIf
		EndIf
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Автор
D

DemoTiVatoR

Новичок
Сообщения
2
Репутация
0
Не помогает, проблема та же. Но я забыл уточнить, что я эту функцию вставляю в бесконечный цикл.
Вот весь код:
Код:
#include <ScreenCapture.au3>
#include "BmpSearch.au3"
#include <WinAPI.au3>
#include <GDIPlus.au3>

Global $g_bPaused = False

HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{F6}", "Terminate")





While 1
	$hWnd = WinWaitActive("[TITLE:AoR; CLASS:Chrome_WidgetWin_1]", "")
	If $hWnd then
			;+++++++++++++++++++++++++++++++++++++++++++++++++++ Жмет на F3(ХИЛИТСЯ)
		$Variable = PixelSearch(889,1035,895,1041,0x070707)
		If IsArray($Variable) = True Then
		Send("{F3}")
		Sleep(100)
		EndIf

													;ЖМЕТ ТП ЕСЛИ НАПАЛИ
		$Variable = PixelSearch(23,942,118,948,0xFF6600)
		If IsArray($Variable) = True Then
			Send("{F2}")
			Sleep(100)
			Send("1")
			Sleep(500000)
		EndIf
													;ТЕЛЕПОРТИРУЕТСЯ В ГОРОД ЕСЛИ ХИЛОК МЕНЬШЕ 5
		$Variable = PixelSearch(1080,1010,1085,1019,0xFFFFFF)
		If IsArray($Variable) = False Then
			$Variable = PixelSearch(1080,1010,1085,1019,0xFFFFF0)
			If IsArray($Variable) = False Then
				$Variable = PixelSearch(1089,1018,1089,1018,0xFFFFFF)
				If IsArray($Variable) = True Then
					$Variable = PixelSearch(1089,1014,1089,1014,0xFFFFFF)
					If IsArray($Variable) = True Then
						$Variable = PixelSearch(1090,1014,1090,1014,0xFFFFFF)
						If IsArray($Variable) = True Then
						Send("{F2}")
						Sleep(1000)
						EndIf
					EndIf
				EndIf
			EndIf
		EndIf

		;+++++++++++++++++++++++++++++++++++++++++++++++++ Жмет на F2(ТП)
		$Variable = PixelSearch(224,981,224,981,0xFFFFFF)
		If @error Then
			$Variable = PixelSearch(225,981,225,981,0xFFFFFF)
			If @error Then
				$Variable = PixelSearch(225,984,225,984,0xFFFFFF)
				If @error Then
					$Variable = PixelSearch(839,1033,842,1044,0x070707)
					If IsArray($Variable) = True Then
					Send("{F2}")
					Sleep(1000)
					EndIf
				EndIf
			EndIf
		EndIf
		;Запуск функции
		KeyAndRing()



		;____________________Ищет надпись Эшборн, если не находит, то бьет моба
		$Variable = PixelSearch(224,981,224,981,0xFFFFFF)
		If IsArray($Variable) = False Then
			$Variable = PixelSearch(225,981,225,981,0xFFFFFF)
			If IsArray($Variable) = False Then
				$Variable = PixelSearch(225,984,225,984,0xFFFFFF)
				If IsArray($Variable) = False Then
					$Variable = PixelSearch(788,154,979,254,0xFFFFFF)
					If IsArray($Variable) = False Then
						$Variable = PixelSearch(797,1019,797,1019,0xFF0706)
						If IsArray($Variable) = False Then
							$Variable = $Variable = PixelSearch(798,1015,798,1015,0xF00A09)
							If IsArray($Variable) = False Then
							MouseMove(449,540,1)
							MouseClick("LEFT")
							Sleep(100)
							EndIf
						EndIf
					EndIf
				EndIf
			EndIf
		EndIf



		;_____________________________________________________Ищет зеленые пиксели
		$Variable = PixelSearch(974,435,1003,444,0x1AEE11)
		If IsArray($Variable) = True Then
									;О ТКРЫВАЕТ КЛАДОВКУ
			MouseMove(957,553,1)
			MouseClick("LEFT")
			Sleep(1300)
			MouseMove(282,351,1)
			MouseClick("LEFT")
			Sleep(1300)
									;УБИРАЕТ ВЕЩИ В КЛАДОВКУ
			Send("{LShift Down}")
			MouseMove(535,473,1)
			MouseClick("RIGHT")
			Sleep(500)
			MouseMove(581,473,1)
			MouseClick("RIGHT")
			Sleep(500)
			MouseMove(331,527,1)
			MouseClick("RIGHT")
			Sleep(500)
			MouseMove(381,527,1)
			MouseClick("RIGHT")
			Sleep(500)
			MouseMove(446,527,1)
			MouseClick("RIGHT")
			Sleep(500)
			MouseMove(487,527,1)
			MouseClick("RIGHT")
			Sleep(500)
			MouseMove(535,527,1)
			MouseClick("RIGHT")
			Sleep(500)
			MouseMove(581,527,1)
			MouseClick("RIGHT")
			Sleep(500)
			Send("{LShift Up}")
			MouseMove(368,786,1)
			MouseClick("LEFT")
			Sleep(500)
			MouseMove(28,596,1)
			MouseClick("LEFT")
			Sleep(1200)
			MouseMove(28,596,1)
			MouseClick("LEFT")
			Sleep(1200)
			MouseMove(28,596,1)
			MouseClick("LEFT")
			Sleep(1200)
			MouseMove(28,596,1)
			MouseClick("LEFT")
			Sleep(1200)
			MouseMove(28,596,1)
			MouseClick("LEFT")
			Sleep(1200)
			MouseMove(28,596,1)
			MouseClick("LEFT")
			Sleep(1200)
			MouseMove(28,596,1)
			MouseClick("LEFT")
			Sleep(1200)
								;ЗАКУП ХИЛ
			MouseMove(943,389,1)
			MouseClick("LEFT")
			Sleep(500)
			MouseMove(244,379,1)
			MouseClick("LEFT")
			Sleep(500)
			Send("{LShift Down}")
			MouseMove(487,311,1)
			MouseClick("RIGHT")
			Sleep(500)
			Send("{LShift Up}")
			MouseMove(365,708,1)
			MouseClick("LEFT")
			Sleep(500)
								;ТЕЛЕПОРТАЦИЯ В ПЕЩЕРУ ПИРАТОВ 2
			MouseMove(29,1052,1)
			MouseClick("LEFT")
			Sleep(500)
			MouseMove(29,959,1)
			MouseClick("LEFT")
			Sleep(500)
			MouseMove(885,410,1)
			MouseClick("LEFT")
			Sleep(8500)
			MouseMove(29,1052,1)
			MouseClick("LEFT")
			Sleep(500)
			MouseMove(29,959,1)
			MouseClick("LEFT")
			Sleep(500)
			MouseMove(1885,589,1)
			MouseClick("LEFT")
			Sleep(3200)
			MouseMove(1885,589,1)
			MouseClick("LEFT")
			Sleep(3200)
			MouseMove(1885,589,1)
			MouseClick("LEFT")
			Sleep(3200)
			Send("5")
	;		MouseMove(28,596,1)
	;		MouseClick("LEFT")
	;		Sleep(1000)
	;		MouseMove(933,459,1)
	;		MouseClick("LEFT")
	;		Sleep(1000)
	;		MouseMove(327,380,1)
	;		MouseClick("LEFT")
	;		Sleep(1000)
	;		MouseMove(1893,588,1)
	;		MouseClick("LEFT")
	;		Sleep(3000)
		EndIf


		$Variable = PixelSearch(224,981,224,981,0xFFFFFF)
		If IsArray($Variable) = True Then
			$Variable = PixelSearch(231,988,231,988,0xFFFFFF)
			If IsArray($Variable) = True Then
			MouseMove(29,588,1)
			MouseClick("LEFT")
			Sleep(2000)
			EndIf
		EndIf
	EndIf
WEnd

Func KeyAndRing()
	_GDIPlus_Startup()
		$hSource = _ScreenCapture_Capture()
		$hBmp = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\RING.bmp")
		$hFind = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp)

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

		$hImage = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "\KEY.bmp")
		$hGet = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)

		$aTwo = _BmpSearch($hSource, $hGet, 1)

		If IsArray($aOne) = True And IsArray($aTwo) = True Then
		Sleep(6000)
		MouseMove(1888,585,1)
		MouseClick("LEFT")
		Sleep(4000)
		MouseMove(1265,949,1)
		MouseClick("RIGHT")
		Sleep(100)
		Beep(500,3000)
		Send("{PAUSE}")
		EndIf
	_GDIPlus_BitmapDispose($hBmp)
	_GDIPlus_BitmapDispose($hImage)
	_WinAPI_DeleteObject($hFind)
	_WinAPI_DeleteObject($hGet)
	_GDIPlus_Shutdown()

EndFunc

Func TogglePause()
    $g_bPaused = Not $g_bPaused
    While $g_bPaused
        Sleep(100)
        ToolTip('Script is "Paused"', 0, 0)
    WEnd
    ToolTip("")
EndFunc   ;==>TogglePause

Func Terminate()
    Exit
EndFunc   ;==>Terminate

Только не ругайтесь, я не знаю ни одного языка, поэтому пользуюсь гуглом)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
на паузу ставишь потребление памяти уменьшается?
в основной цикл, возможно, нужно добавить Sleep
Код:
While 1
	$hWnd = WinWaitActive("[TITLE:AoR; CLASS:Chrome_WidgetWin_1]", "")
...............................................................
Sleep(10)
WEnd
 
Верх