Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
1-1483
race1
2003-08-18 13:14
2003.09.01
tlistbox.getdata :)


1-1398
Tihomirov
2003-08-16 11:03
2003.09.01
Автозагрузка


1-1435
Layner
2003-08-19 09:11
2003.09.01
Как у FileListBox


4-1702
Dan
2003-07-03 16:36
2003.09.01
Подскажите по использованию DrawText


7-1685
S.G.K.
2003-06-16 15:08
2003.09.01
Как вызвать прерывание ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский