Главная страница
    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.006 c
1-7031
magArt
2002-05-21 14:45
2002.06.03
Разработка компонентов


1-6972
antistatic
2002-05-22 15:47
2002.06.03
Как запретить запуск копии программы?


4-7264
Porton
2002-04-01 16:17
2002.06.03
Изменение размеров рабочего стола


3-6916
Саша
2002-05-14 07:49
2002.06.03
dbgrid.options


14-7175
Yakudza
2002-04-24 13:17
2002.06.03
Palm





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