Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.03;
Скачать: CL | DM;

Вниз

Поиск процессов в ситеме???   Найти похожие ветки 

 
mdMichael   (2002-04-01 20:00) [0]

Не могу поймать все процессы в системе. Как делается???


 
watcher   (2002-04-01 20:21) [1]

EnumWindows() + GetWindowThreadProcessID()


 
Виктор Щербаков ©   (2002-04-02 08:59) [2]

watcher (01.04.02 20:21)
Это поиск процесов с окнами.
Если нужно только для Win9x, то лучше воспользоваться ToolHelp функциями. В 2k тоже будет работать, не пойдет на NT.


 
Alx2 ©   (2002-04-02 09:27) [3]

Подобные вопросы регулярно всплывают.
По мотивам этого (спасибо SkyWalkerу) можно придумать чего-нибудь:

Function GetAllProcessesFiles(Strs: TStringList): Boolean;
Type
TEnumProcesses = Function (lpidProcess: LPDWORD; cb: DWORD; Var cbNeeded: DWORD): BOOL Stdcall;
TEnumProcessModules = Function (hProcess: THandle; lphModule: LPDWORD; cb: DWORD; Var lpcbNeeded: DWORD): BOOL Stdcall;
TGetModuleFileNameExA = Function (hProcess: THandle; HMODULE: HMODULE; lpFileName: PAnsiChar; nSize: DWORD): DWORD Stdcall;
Var
EnumProcesses : TEnumProcesses;
EnumProcessModules : TEnumProcessModules;
GetModuleFileNameExA: TGetModuleFileNameExA;
hPSAPI : THandle;
Counter, Counter1 : LongWord;
PIDs : Array[0..1023] Of DWORD;
pbNeeded : DWORD;
ProcHandle : THandle;
ModHndls : Array[0..1023] Of DWORD;
mbNeeded : DWORD;
ModulePath : String;
Begin
Result := False;
hPSAPI := LoadLibrary("PSAPI.dll");
If hPSAPI < 32 Then
Begin
Result := False;
Exit
End;
EnumProcesses := GetProcAddress(hPSAPI, "EnumProcesses");
EnumProcessModules := GetProcAddress(hPSAPI, "EnumProcessModules");
GetModuleFileNameExA := GetProcAddress(hPSAPI, "GetModuleFileNameExA");
EnumProcesses(@PIDs, Length(PIDs), pbNeeded);
For Counter := 0 To (pbNeeded Div 4) - 1 Do
Begin
ProcHandle := OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, False, PIDs[Counter]);
If ProcHandle <> 0 Then
Begin
If EnumProcessModules(ProcHandle, @ModHndls, Length(ModHndls), mbNeeded) Then
For Counter1 := 0 To (mbNeeded Div 4) - 1 Do
Begin
SetLength(ModulePath, MAX_PATH);
GetModuleFileNameExA(ProcHandle, ModHndls[Counter1], PChar(ModulePath), MAX_PATH);
Strs.Add(AnsiLowerCase(ModulePath));
End;
CloseHandle(ProcHandle);
End;
End;
FreeLibrary(hPSAPI)
End;

Функции можно не грузить вручную из DLL, если подцепить unit PsApi


 
Fellomena   (2002-04-02 10:28) [4]

2 Виктор Щербаков:
Если нужно только для Win9x, то лучше воспользоваться ToolHelp функциями. В 2k тоже будет работать, не пойдет на NT.
Хех, только вчера пробовала свою прогу на Win2k которая с ToolHelp работает.
Впринципе она работает, но для некоторых процессов как-то уж очень странно определяет имена модулей, которых были загружены в контекст рассматриваемого процесса.
Не успела разобраться детальнее - может ты подскажешь в чём дело ?


 
drpass ©   (2002-04-02 11:39) [5]

>Alx2
Твой вариант вообще не будет работать, у парня Win95/Win98, и никакой psapi.dll у него просто нет.
В данном случае нужно использовать функции ToolHelp32:

uses TlHelp32
var
pe:TProcessEntry32;
snap:THandle;
...
snap:=CreateToolhelp32Snapshot(th32cs_snapprocess, 0);
if integer(snap)=-1 then begin
exit;
end else begin
pe.dwSize:=sizeof(pe);
if Process32First(snap, pe) then
repeat
ListView1.Items.Add(string(pe.szExeFile));
until not Process32Next(snap, pe)
else exit;
end



 
Alx2 ©   (2002-04-02 14:23) [6]

>drpass © (02.04.02 11:39)
И действительно :(
Не посмотрел на ОС у человека...



Страницы: 1 вся ветка

Текущий архив: 2002.06.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
1-7000
NorthMan
2002-05-23 12:01
2002.06.03
Можно ли с помощью директивы компилятора определить,


4-7269
AFROLOV
2002-04-01 17:06
2002.06.03
Как определить что был сделан click из глобальной ловушки.


6-7137
Serd_hhc
2002-03-21 09:53
2002.06.03
TServerSocket


1-7061
MaximatorVeter
2002-05-21 20:20
2002.06.03
Если ли что-то типа препроцессора для Delphi?


3-6921
kaif
2002-05-10 17:06
2002.06.03
Еще одна ерунда с FOREIGN KEY