Добрый вечер! Прошу помочь понять в чем проблема. Нижеприведенная функция крутится в таймере с интервалом 1сек и достает текущий адрес папки из проводника. Если смотреть в диспетчере, то с каждой секундой потребляемая память увеличивается на 50-60Кб. Почему так происходит и как это предотвратить?
uses
Winapi.ActiveX, SHDocVw, System.Win.ComObj, ShLWAPI;
function ExtractDirAddress(Wnd: HWND): string;
var
I: Integer;
WndIface: IDispatch;
ShellWindows: IShellWindows;
WebBrowserApp: IWebBrowserApp;
ResultSize: DWORD;
begin
if Succeeded(CoCreateInstance(CLASS_ShellWindows, nil, CLSCTX_LOCAL_SERVER, IID_IShellWindows, ShellWindows))
then
begin
for I := 0 to ShellWindows.Count - 1 do
begin
if (Wnd <> HWND_TOPMOST)
then WndIface:= ShellWindows.Item(VarAsType(I, VT_I4))
else WndIface:= ShellWindows.Item(VarAsType(SWC_EXPLORER, VT_UI4));
if Succeeded(WndIface.QueryInterface(IID_IWebBrowserApp, WebBrowserApp))
then
begin
if (Wnd = HWND_TOPMOST) or (WebBrowserApp.HWnd = Wnd) then
begin
Result:= WebBrowserApp.LocationURL;
Break;
end;
end;
end;
end;
end;
procedure TForm1.tmr1Timer(Sender: TObject);
var
S: string;
begin
S:= ExtractDirAddress(GetForegroundWindow);
if S > ''
then mmo1.Text:= '[' + TimeToStr(Now) + ']: ' + S;
end;