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




Вниз

Как получить список процессов ??? 


NetBreaker666   (2001-11-15 04:08) [0]

Помогите, Pls... и если можно, то скажите, как узнать, какие DLL"ки при attachЭены к процессу



YUS   (2001-11-15 07:08) [1]

Нужно узнать ID процесса ф-ция GetWindowThreadProcessId затем получить
список модулей CreateToolHelp32Snapshot и через ф-ции Module32First и Module32Next получить список всех dll и exe процесса.



jk   (2001-11-15 20:18) [2]

Для NT/2000/2001 ...
есть функции в psapi.dll
EnumProcesses
EnumProcessModules

Смотри в msdn



paul_shmakov   (2001-11-16 11:21) [3]

смотри здесь подробное описание для всех версий windows:
http://rsdn.ru/qna/?baseserv/enumproc.xml



lel   (2001-11-16 11:28) [4]

//Получает список запушенных процессов
function GetSystemProcess():TStringList;
var
List: TStringList;
PHandle: THandle;
ProcEntry:TProcessEntry32;
begin
List:= TStringList.Create;
result:=List;
List.Sorted:=true;
PHandle:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
ProcEntry.dwSize:=sizeof(TProcessEntry32);
if Process32First(PHandle,ProcEntry)
then List.Add(ProcEntry.szExeFile);
while Process32Next(PHandle,ProcEntry) do List.Add(ProcEntry.szExeFile);
CloseHandle(PHandle);
end;

//Убивает лишний
procedure Kill(ProgramPath:string);
var
Hand,Handel:THandle;
ex:Cardinal;
ProcEntry:TProcessEntry32;
processID:Cardinal;
begin
Handel:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
ProcEntry.dwSize:=sizeof(TProcessEntry32);
if Process32First(Handel,ProcEntry) then if
UpperCase(ProcEntry.szExeFile)=upperCase(ProgramPath)then
processID:=ProcEntry.th32ProcessID;
While Process32Next(Handel,ProcEntry) do if
UpperCase(ProcEntry.szExeFile)=upperCase(ProgramPath)then begin
processID:=ProcEntry.th32ProcessID;
break;
end;
CloseHandle(Handel);
Hand:=openProcess(PROCESS_TERMINATE,false,DWORD(processID));
GetExitCodeProcess(Hand,ex);
TerminateProcess(Hand,ex);
CloseHandle(Hand);
end;

//Используемых ими модулей
function GetProcessModules(ProcName:string):TStringList;
var
ProcEntr:TProcessEntry32;
ModEntr:TModuleEntry32;
Proc:THandle;
Module:THandle;
Modul:TStringList;
s:string;
begin
Modul:=TStringList.Create;
Modul.Sorted:=true;
Proc:=CreateToolHelp32Snapshot(TH32CS_SnapProcess,0);
ProcEntr.dwSize:=sizeof(TProcessEntry32);
if Process32First(Proc,ProcEntr) then if
not(UpperCase(ProcEntr.szExeFile)=UpperCase(ProcName))
then While Process32Next(Proc,ProcEntr) do if
UpperCase(ProcEntr.szExeFile)=UpperCase(ProcName)
then break;
ModEntr.dwSize:=sizeof(TModuleEntry32);
Module:=CreateToolHelp32Snapshot(TH32CS_SNAPMODULE,ProcEntr.th32ProcessID);
if Module32First(Module,ModEntr) then
begin
s:=ModEntr.szExePath;
s:=s+"="+IntToStr(ModEntr.GlblcntUsage);
Modul.Add(s);
end;
while Module32Next(Module,ModEntr) do
begin
s:=ModEntr.szExePath;
s:=s+"="+IntToStr(ModEntr.GlblcntUsage);
Modul.Add(s);
end;
CloseHandle(Proc);
CloseHandle(Module);
Result:=Modul;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items := GetSystemProcess;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text:=ListBox1.Items.Strings[ListBox1.ItemIndex] ;
Memo2.Lines:=GetProcessModules(ListBox1.Items.Strings[ListBox1.ItemIndex] );
// Kill(
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Kill(ListBox1.Items.Strings[ListBox1.ItemIndex]) ;
Sleep(100);
ListBox1.Items := GetSystemProcess;
end;

procedure GetParentProcessInfo(var ID: DWORD; var Path: String);
var
ProcessID: DWORD;
hSnapshoot: THandle;
pe32: TProcessEntry32;
begin
ProcessID := GetCurrentProcessID;
ID := 0;
Path := "";

hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hSnapshoot = -1) then
Exit;

pe32.dwSize := SizeOf(TProcessEntry32);
if (Process32First(hSnapshoot, pe32)) then
repeat
if pe32.th32ProcessID = ProcessID then
begin
ID := pe32.th32ParentProcessID;
Break;
end;
until not Process32Next(hSnapshoot, pe32);

if ID <> -1 then
begin
if (Process32First(hSnapshoot, pe32)) then
repeat
if pe32.th32ProcessID = ID then
begin
Path := pe32.szExeFile;
Break;
end;
until not Process32Next(hSnapshoot, pe32);
end;
CloseHandle (hSnapshoot);
end;


end.
Желаю удачи в темных делах.
С уважением Алексей.



paul_shmakov   (2001-11-16 11:31) [5]

2 lel:
это только win95,98,me,win2k. под nt не пойдет.




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




Наверх





Память: 0.73 MB
Время: 0.025 c
14-42561          T2                    2001-11-19 03:09  2002.01.14  
Win Fax


3-42386           Oleg_K                2001-12-08 12:42  2002.01.14  
Работа со строками в DBGrid


4-42601           Miwa                  2001-11-13 14:33  2002.01.14  
ShellExecute


1-42519           Andrey196             2001-12-26 16:15  2002.01.14  
Как из события одново компонента вызвать событие другово компонета


1-42456           777                   2001-12-25 04:10  2002.01.14  
Ширина колонок TDBGrid