IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Как определить откуда был запущен процесс?, Из drkb....
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +



type TModuleArray = array of TModuleEntry32;

.............

function GetModulesListByProcessId(ProcessId : Cardinal) : TModuleArray;
var
hSnapshot : THandle;
lpme : TModuleEntry32;
procedure AddModuleToList;
begin
SetLength(Result,High(Result)+2);
Result[high(Result)]:=lpme;
end;
begin
SetLength(Result,0);
hSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,ProcessId);
if hSnapshot=-1 then RaiseLastWin32Error;
lpme.dwSize:=SizeOf(lpme);
if Module32First(hSnapshot,lpme) then
begin
AddModuleToList;
while Module32Next(hSnapshot,lpme) do AddModuleToList;
end;
end;


function GetWindowPatch(Wnd: hWnd): string; // Нахождение пути к ехе по заголовку окна...
var
i: integer;
modarr : TModuleArray;
Pid: Cardinal;
begin
result:='Null';
GetWindowThreadProcessId(Wnd,@Pid);
modarr:=GetModulesListByProcessId(Pid); result:='Null';
for i:=0 to High(modarr) do
begin
if Integer(modarr[i].modBaseAddr)=$400000 then
begin
result:=modarr[i].szExePath; break;
end;
end;
end;


procedure TFormWinHide.SearchWindow; // Поиск окон...
VAR
searchTm: boolean;
searchTmInt, i, OldWC, OldWCH: integer;
name, TmpStr, Str: string;
Tmp: TMenuItem;
Wnd: hWnd;
buff: ARRAY [0..127] OF Char;
begin
OldWC:=WinCount;
WinCount:=0;
OldWCH:=WinCountH;
WinCountH:=0;
// Считаем количество окон..
Wnd:= GetWindow(Handle, gw_HWndFirst); WHILE Wnd <> 0 DO BEGIN IF (Wnd <> Application.Handle) THEN BEGIN
if IsWindowVisible(Wnd) then begin
GetWindowText(Wnd, buff, sizeof(buff)); TmpStr:=StrPas(buff);
if (GetWindowText(Wnd, buff, sizeof(buff)) = 0) then
begin name:=GetWindowPatch(Wnd); if (name<>'Null') then TmpStr:=name; end;

if (TmpStr<>'') and (TmpStr<>paramStr(0)) then begin WinCount:=WinCount+1; END;
end else begin
WinCountH:=WinCountH+1;
end; end; Wnd := GetWindow(Wnd, gw_hWndNext); END; }


1) вот... примерно так... procedure TFormWinHide.SearchWindow вызывается таймером каждые 100 мс...
идет утечка памяти... не могу разабраться откуда...

2) а можно не по таймеру окна искать, а по системному сообщению (изменилось общее количество окон или одно из окон изменило статус с "IsWindowVisible(Wnd)" и наоборот)?
если да, то как...

3) Ну это к другой теме, но спрошу здесь же... в контекстном меню задаю для пункта hint, ноль эмоций.. что надо сделать, чтобы он там отображался?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
куда тут копать хоть?
В MSDN: ExtractIcon Function

Цитата
Remarks
This function is not supported for icons in 16-bit executables and DLLs.
You must destroy the icon handle returned by ExtractIcon by calling the DestroyIcon function.
У тебя этого не делается, вот тебе и утечка.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 20:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name