Форум: "WinAPI";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];
ВнизЛюди, понимаю, что мне пить надо меньше, на как получить список процессов. Найти похожие ветки
← →
NetBreaker666 (2001-12-25 16:16) [0]Чегото я не нашел функции EnumThreads в SDK.
Тогда какой получать ???
← →
Fellomena (2001-12-26 16:02) [1]http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1009290680&n=5
...да, Thread - это не процесс 8)
← →
Vovchik (2002-01-02 00:55) [2]Есть принципиальные отличия получения списка процессов в Win9x и Win NT/2K.
Для Win9x (и Win 2K) пойдёт функция CreateToolhelp32Snapshot, Process32First, Process32Next и прочие с ними связанные (см. хелп).
Для Win NT по-другому:
uses windows,tlhelp32,sysutils;
function NtQuerySystemInformation(l:UINT;buff:Pointer;buffl:UINT;u:UINT):BOOL;stdcall;external "ntdll.dll";
type
ThreadInfo=record
ftCreationTime:FILETIME;
dwUnknown1:DWORD;
dwStartAddress:DWORD;
dwOwningPID:DWORD;
dwThreadID:DWORD;
dwCurrentPriority:DWORD;
dwBasePriority:DWORD;
dwContextSwitches:DWORD;
dwThreadState:DWORD;
dwUnknown2:DWORD;
dwUnknown3:DWORD;
dwUnknown4:DWORD;
dwUnknown5:DWORD;
dwUnknown6:DWORD;
dwUnknown7:DWORD;
end;
TProcessInfo=record
dwOffset:DWORD; // an ofset to the next Process structure
dwThreadCount:DWORD;
dwUnkown1:array[0..5] of DWORD;
ftCreationTime:FILETIME;
dwUnkown2:DWORD;
dwUnkown3:DWORD;
dwUnkown4:DWORD;
dwUnkown5:DWORD;
dwUnkown6:DWORD;
pszProcessName:PWideChar;
dwBasePriority:DWORD;
dwProcessID:DWORD;
dwParentProcessID:DWORD;
dwHandleCount:DWORD;
dwUnkown7:DWORD;
dwUnkown8:DWORD;
dwVirtualBytesPeak:DWORD;
dwVirtualBytes:DWORD;
dwPageFaults:DWORD;
dwWorkingSetPeak:DWORD;
dwWorkingSet:DWORD;
dwUnkown9:DWORD;
dwPagedPool:DWORD; // kbytes
dwUnkown10:DWORD;
dwNonPagedPool:DWORD; // kbytes
dwPageFileBytesPeak:DWORD;
dwPageFileBytes:DWORD;
dwPrivateBytes:DWORD;
dwUnkown11:DWORD;
dwUnkown12:DWORD;
dwUnkown13:DWORD;
dwUnkown14:DWORD;
ati:array[0..0] of ThreadInfo;
end;
var
h:THANDLE;
i:integer;
tt:UINT;
j:BOOL;
vt:PWideChar; // UNICODE
tinfo,tinf2:^ThreadInfo;
pinfo:^TProcessInfo;
f:file of byte;
buf:array of byte;
begin
tt:=20000;
SetLength(buf,tt);
j:=NtQuerySystemInformation(5,@buf[0],tt,0);
writeln(j);
writeln("Image":20,"PID":10,"Parent PID":10);
pinfo:=@buf[0];
while true do
begin
vt:=pinfo^.pszProcessName;
try
write(WideCharToString(vt):20);
except
write("Unknown Process":20);
end;
writeln(pinfo^.dwProcessID:10,pinfo^.dwParentProcessID:10);
if pinfo^.dwOffset=0 then break;
pinfo:=pointer(UINT(@pinfo^.dwOffset)+pinfo^.dwOffset);
end;
end.
← →
otari (2002-01-04 21:22) [3]uses tlhelp32;
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
hSnapshoot : THandle;
pe32 : TProcessEntry32;
List : TStrings;
begin
memo1.lines.clear;
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshoot = -1) then Exit;
pe32.dwSize := SizeOf(TProcessEntry32);
if (Process32First(hSnapshoot, pe32)) then repeat
I := memo1.Lines.Add(Format("%x, %x: %s", [pe32.th32ProcessID,
pe32.th32ParentProcessID,pe32.szExeFile]));
memo1.Lines.Objects[I] := Pointer(pe32.th32ProcessID);
until not Process32Next(hSnapshoot, pe32);
CloseHandle (hSnapshoot);
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c