Добрый вечер. Написал простенький скрипт, который делает скриншот не активного окна. Всё вроде бы работает как надо, но есть одно но. В одной из основополагающих функций имеется утечка памяти. Эта функция вызывается в цикле из-за чего потребление оперативной памяти постоянно растёт. Если саму функцию вынести за пределы цикла, то ничего подобного не наблюдается. Помогите устранить утечку пожалуйста
Кажется я уже сам нашел. После того, как вернули $hBMP и сделали с ним что хотели его нужно удалить через _WinAPI_DeleteObject($hBMP). В противном случае при вызове функции $hBMP не перезаписывается, а создаётся новый. Тут-то и происходила утечка. Тему можно считать решённой.
Код:
Func _WinCapture($hWnd)
Local $hDDC, $hCDC, $hBMP, $aPos = WinGetPos($hWnd)
$hDDC = _WinAPI_GetDC($hWnd)
$hCDC = _WinAPI_CreateCompatibleDC($hDDC)
$hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $aPos[2], $aPos[3])
_WinAPI_SelectObject($hCDC, $hBMP)
_WinAPI_PrintWindow ($hWnd, $hCDC)
_WinAPI_ReleaseDC($hWnd, $hDDC)
_WinAPI_DeleteDC($hCDC)
Return $hBMP
EndFunc
Сообщение автоматически объединено:
Кажется я уже сам нашел. После того, как вернули $hBMP и сделали с ним что хотели его нужно удалить через _WinAPI_DeleteObject($hBMP). В противном случае при вызове функции $hBMP не перезаписывается, а создаётся новый. Тут-то и происходила утечка. Тему можно считать решённой.
Последнее редактирование: