如何在95下监控运行的其他程序?(75分)

  • 主题发起人 吕雪松
  • 开始时间

吕雪松

Unregistered / Unconfirmed
GUEST, unregistred user!
我想知道当前有哪些程序在内存中运行,类似于“结束任务”中
的任务列表。如何实现?16位的GetCurrentTask()和
GetWindowTask()不能使用了,那么32位API中的
GetCurrentThread()、GetCurrentProcess()和
GetWindowThreadProcessId()等函数又是如何使用的,请高手
赐教,先谢了。
 
参照下面这段程序,就搞定了啦。^-^
==================================
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.
 
顶部