Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
14-7209
dlp
2002-04-28 11:17
2002.06.03
Помогите с алгоритмом!


8-7136
UnDISCOvery
2002-01-05 14:02
2002.06.03
Графика и База Данных. Как совместить ?


3-6940
AndrewK
2002-05-14 13:19
2002.06.03
Как программно зарегистрировать ODBC алиас?


14-7206
gek
2002-04-25 15:33
2002.06.03
Ребята сей передали что Хаттаба завалили


3-6884
konorl
2002-05-08 05:49
2002.06.03
Упаковка Paradox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский