你的问题和下面相同:
想知道当前有哪些程序在内存中运行,类似于“结束任务”中
的任务列表。如何实现?16位的GetCurrentTask()和
GetWindowTask()不能使用了,那么32位API中的
GetCurrentThread()、GetCurrentProcess()和
GetWindowThreadProcessId()等函数又是如何使用的,请高手
赐教,先谢了。
来自:aimingoo
时间:98-9-9 05:19:40
ID:1621
参照下面这段程序,就搞定了啦。^-^
==================================
uses ... TLHelp32, ...
type
TForm1 = class(TForm)
...
end;
var
Form1: TForm1;
l : Tlist; ////返回的东东在"L"这个TList中。
type
TProcessInfo = Record
ExeFile : String;
ProcessID : DWORD;
end;
pProcessInfo = ^TProcessInfo;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var p : pProcessInfo;
i : integer;
ContinueLoop:BOOL;
var
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
begin
l := TList.Create;
l.Clear;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop)<>0 do
begin
New(p);
p.ExeFile := FProcessEntry32.szExeFile;
p.ProcessID := FProcessEntry32.th32ProcessID;
l.Add(p);
ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var p : pProcessInfo;
i : integer;
begin
With l do
for i := Count - 1 DownTo 0 do
begin p := items; Dispose(p); Delete(i); end;
end;
...
end.