Форум: "Система";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
ВнизКак узнать какие библиотеки DLL сейчас запущены в оперативке? Найти похожие ветки
← →
AJ_UA (2003-06-13 15:50) [0]Как узнать какие библиотеки DLL сейчас запущены в оперативке?
Это должна быть АРІ функция?
← →
clickmaker (2003-06-13 15:55) [1]EnumProcesses, OpenProcess, EnumProcessModules, GetModuleFileNameEx
← →
AJ_UA (2003-06-13 15:56) [2]а нуна какой-то модуль подключать?
← →
AJ_UA (2003-06-13 16:33) [3]ну я использовал:
procedure GetProcessList(var sl:TStrings);
var
pe:TProcessEntry32;
ph, snap:THandle;//
← →
AJ_UA (2003-06-13 16:42) [4]Впринцыпе они ведь не отображаються в Диспетчере задач...а как их можна увидеть в среде Windows ???
← →
Burmistroff (2003-06-14 00:43) [5]
pmrec = record
hMod: DWORD;
Name: string;
end;
PrModList= array of pmrec;
PPRModList = ^PrModList;
procedure EnumPrMod(PID: DWORD; p: PPRModList);
var
ProcHand, cs1, cs2: DWORD;
e: array [0..1023] of DWORD;
ModName: array [0..511] of char;
begin
ProcHand := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
if EnumProcessModules(ProcHand, @e, sizeof(e), cs2) then
begin
cs2:=cs2 div 4;
SetLength(p^, cs2+1);
p^[0].hMod:=cs2+1;
for cs1:=1 to cs2 do
begin
p^[cs1].hMod:=e[cs1-1];
GetModuleFileNameEX(ProcHand, e[cs1-1], @ModName[0], SizeOf(ModName));
p^[cs1].Name:=StrPas(PChar(@ModName[0]));
end;
( ProcHand)
pmrec = record
hMod: DWORD;
Name: string;
end;
PrModList= array of pmrec;
PPRModList = ^PrModList;
procedure EnumPrMod(PID: DWORD; p: PPRModList);
var
ProcHand, cs1, cs2: DWORD;
e: array [0..1023] of DWORD;
ModName: array [0..511] of char;
begin
ProcHand := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
if EnumProcessModules(ProcHand, @e, sizeof(e), cs2) then
begin
cs2:=cs2 div 4;
SetLength(p^, cs2+1);
p^[0].hMod:=cs2+1;
for cs1:=1 to cs2 do
begin
p^[cs1].hMod:=e[cs1-1];
GetModuleFileNameEX(ProcHand, e[cs1-1], @ModName[0], SizeOf(ModName));
p^[cs1].Name:=StrPas(PChar(@ModName[0]));
end;
end;
CloseHandle(ProcHand);
end;
← →
AJ_UA (2003-06-17 09:55) [6]а как надо использовать процедуру EnumPrMod ???
← →
AJ_UA (2003-06-17 10:17) [7]чего нужно подставлять во входные параметры [PID](я ж ведь не знаю идентивикатор процесса), [р] ?
← →
Digitman (2003-06-17 10:27) [8]
> AJ_UA
как это не знаешь ? а это что в твоем коде :
procs[i] ???
← →
AJ_UA (2003-06-17 19:02) [9]так там же иная функция.....
а есть ли какая-то процедура которая не имеет входных параметров, а только результат(например результат TStrings)?
← →
Digitman (2003-06-18 09:43) [10]
> AJ_UA
какая еще "иная" ? ты спросил, что подставлять в кач-ве факт.параметра PID в ф-цию, предложенную Burmistroff (14.06.03 00:43), я тебе и сказал - идентификаторы процессов, которые ты получаешь в procs[i] в (13.06.03 16:33).
Собственно, я не понимаю, зачем тебе код от Burmistroff - для NT-based систем ты и в своем коде делаешь тоже самое. А для Win9x для каждого полученного при перечислении с пом. Process32First/Next процесса просто нужно перечислить его модули с пом. Module32First/Next
← →
AJ_UA (2003-06-18 14:49) [11]
> Digitman
извини за мои глупые вопросы, но я просто раньше никогда не пользовался системными ф-циями, тем более процессами.....Подскажы плз,ну вот моя (вообщето не моя, подсказали) ф-ция выводит запущеные процессы а чего нужно вставить еще туда, чтобы показывались модули этого процесса???
← →
Digitman (2003-06-18 15:54) [12]вот фрагмент работы с ToolHelp, разбирайся сам
procedure TForm1.Button1Click(Sender: TObject);
var
pe: PProcessEntry32;
te: PThreadEntry32;
me: PModuleEntry32;
avail: Boolean;
li: TListItem;
begin
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
if hSnapshot <> INVALID_HANDLE_VALUE then
try
// енумерация процессов в системе
New(pe);
try
pe.dwSize := SizeOf(TProcessEntry32);
avail := Process32First(hSnapshot, pe^);
lvwProcessList.items.clear;
while avail do begin
li := lvwProcessList.Items.Add;
li.Caption := IntToHex(pe.th32ProcessID, 8); // id процесса
li.Subitems.Add(string(PChar(@pe.szExeFile))); // имя процесса
li.Subitems.Add(IntToStr(pe.pcPriClassBase)); // базовый класс приоритета
li.Subitems.Add(IntToHex(pe.th32ParentProcessID, 8)); // id род.процесса
li.Subitems.Add(IntToStr(pe.cntUsage)); // счетчик обращений
li.Subitems.Add(IntToStr(pe.cntThreads)); // число тредов
li.Subitems.Add(IntToHex(pe.th32DefaultHeapID, 8)); // id кучи по-умолчанию
li.Subitems.Add(IntToHex(pe.th32ModuleID, 8)); // id модуля, не путать с хэндлом модуля
avail := Process32Next(hSnapshot, pe^);
end;
finally
Dispose(pe);
end;
//енумерация тредов в системе*************************
New(te);
try
te.dwSize := SizeOf(TThreadEntry32);
avail := Thread32First(hSnapshot, te^);
lvwThreadList.items.clear;
while avail do begin
li := lvwThreadList.Items.Add;
li.Caption := IntToHex(te.th32ThreadID, 8); // id треда
li.Subitems.Add(IntToHex(te.th32OwnerProcessID, 8)); // id процесса-владельца
li.Subitems.Add(IntToStr(te.cntUsage)); // сч-к обращений
li.Subitems.Add(IntToStr(te.tpBasePri)); // баз.приоритет
li.Subitems.Add(IntToStr(te.tpDeltaPri)); // отн.приоритет
avail := Thread32Next(hSnapshot, te^);
end;
finally
Dispose(te);
end;
//енумерация модулей всех процессов в системе ****************
New(me);
try
me.dwSize := SizeOf(TModuleEntry32);
avail := Module32First(hSnapshot, me^);
lvwModuleList.items.clear;
while avail do begin
li := lvwModuleList.Items.Add;
li.Caption := IntToHex(me.th32ModuleID, 8); // id модуля
li.Subitems.Add(IntToHex(me.th32ProcessID, 8)); // id процесса, в ВАП которого модуль отображен
li.Subitems.Add(string(PChar(@me.szModule))); // имя модуля
li.Subitems.Add(string(PChar(@me.szExePath))); // путь к файлу модуля
li.Subitems.Add(IntToStr(me.GlblcntUsage)); // глоб.сч-к обращений
li.Subitems.Add(IntToStr(me.ProccntUsage)); // сч-к выгрузки
li.Subitems.Add(IntToHex(Integer(me.modBaseAddr), 8)); // баз.адрес модуля в ВАП процесса
li.Subitems.Add(IntToHex(me.modBaseSize, 8)); // размер модуля в ВАП процесса
li.Subitems.Add(IntToHex(me.hModule, 8)); // хэндл модуля
avail := Module32Next(hSnapshot, me^);
end;
finally
Dispose(me);
end;
finally
( hSnapshot)вот фрагмент работы с ToolHelp, разбирайся сам
procedure TForm1.Button1Click(Sender: TObject);
var
pe: PProcessEntry32;
te: PThreadEntry32;
me: PModuleEntry32;
avail: Boolean;
li: TListItem;
begin
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
if hSnapshot <> INVALID_HANDLE_VALUE then
try
// енумерация процессов в системе
New(pe);
try
pe.dwSize := SizeOf(TProcessEntry32);
avail := Process32First(hSnapshot, pe^);
lvwProcessList.items.clear;
while avail do begin
li := lvwProcessList.Items.Add;
li.Caption := IntToHex(pe.th32ProcessID, 8); // id процесса
li.Subitems.Add(string(PChar(@pe.szExeFile))); // имя процесса
li.Subitems.Add(IntToStr(pe.pcPriClassBase)); // базовый класс приоритета
li.Subitems.Add(IntToHex(pe.th32ParentProcessID, 8)); // id род.процесса
li.Subitems.Add(IntToStr(pe.cntUsage)); // счетчик обращений
li.Subitems.Add(IntToStr(pe.cntThreads)); // число тредов
li.Subitems.Add(IntToHex(pe.th32DefaultHeapID, 8)); // id кучи по-умолчанию
li.Subitems.Add(IntToHex(pe.th32ModuleID, 8)); // id модуля, не путать с хэндлом модуля
avail := Process32Next(hSnapshot, pe^);
end;
finally
Dispose(pe);
end;
//енумерация тредов в системе*************************
New(te);
try
te.dwSize := SizeOf(TThreadEntry32);
avail := Thread32First(hSnapshot, te^);
lvwThreadList.items.clear;
while avail do begin
li := lvwThreadList.Items.Add;
li.Caption := IntToHex(te.th32ThreadID, 8); // id треда
li.Subitems.Add(IntToHex(te.th32OwnerProcessID, 8)); // id процесса-владельца
li.Subitems.Add(IntToStr(te.cntUsage)); // сч-к обращений
li.Subitems.Add(IntToStr(te.tpBasePri)); // баз.приоритет
li.Subitems.Add(IntToStr(te.tpDeltaPri)); // отн.приоритет
avail := Thread32Next(hSnapshot, te^);
end;
finally
Dispose(te);
end;
//енумерация модулей всех процессов в системе ****************
New(me);
try
me.dwSize := SizeOf(TModuleEntry32);
avail := Module32First(hSnapshot, me^);
lvwModuleList.items.clear;
while avail do begin
li := lvwModuleList.Items.Add;
li.Caption := IntToHex(me.th32ModuleID, 8); // id модуля
li.Subitems.Add(IntToHex(me.th32ProcessID, 8)); // id процесса, в ВАП которого модуль отображен
li.Subitems.Add(string(PChar(@me.szModule))); // имя модуля
li.Subitems.Add(string(PChar(@me.szExePath))); // путь к файлу модуля
li.Subitems.Add(IntToStr(me.GlblcntUsage)); // глоб.сч-к обращений
li.Subitems.Add(IntToStr(me.ProccntUsage)); // сч-к выгрузки
li.Subitems.Add(IntToHex(Integer(me.modBaseAddr), 8)); // баз.адрес модуля в ВАП процесса
li.Subitems.Add(IntToHex(me.modBaseSize, 8)); // размер модуля в ВАП процесса
li.Subitems.Add(IntToHex(me.hModule, 8)); // хэндл модуля
avail := Module32Next(hSnapshot, me^);
end;
finally
Dispose(me);
end;
finally
CloseHandle(hSnapshot);
end;
end;
← →
AJ_UA (2003-06-18 18:18) [13]ок. попробую!
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c