请问诸位同仁:怎样得到电脑中所有运行中的程序名和它们的路径,并杀死这些进程??(100分)

  • 主题发起人 主题发起人 菜鸟之最
  • 开始时间 开始时间

菜鸟之最

Unregistered / Unconfirmed
GUEST, unregistred user!
多多赐教!!
 
procedure Tsyste.procedu(); //得到当前的进程名和ID
var FSnap:Thandle;
PE:TprocessEntry32;
PPE:PProcessEntry32;
begin
if FSnap>0 then closeHandle(FSnap);
FSnap:=createtoolhelp32Snapshot(TH32CS_SNAPALL,0);
if FSnap=-1 then
raise Exception.create('Windows发生致命错误即将关闭!');
PE.dwsize:=sizeof(PE);
if Process32first(FSnap,PE) then
repeat
New(PPE);
PPE^:=PE;
ListBox1.items.add(PPE.Th32processID)+'#'+PPE.szExeFile);
until Not Process32next(FSnap,PE);
closeHandle(FSnap);
end;
关闭的时候,找到哪个进程ID
var h,a:Thandle;
h:=openprocess(PROCESS_ALL_ACCESS,True,PPE.Th32processID);
getExitCodeProcess(h,a);
if terminateProcess(h,a) then
begin
Showmessage('进程已关闭!');
end;
 
在2000下只能看到文件名,没有路径的,98下用,看路径要用其他函数。
 
请问上面那个过程是使用什么单元文件啊?
 
To 张无忌:
你那样是得到所有进程的名称和路径,人家是要得到所有应用程序的路径和名称,也就是
任务管理器中的应用程序列表。
 
要用shellApi单元
你看2000的任务管理器里可以看到程序的路径吗?[8D]
 
2000下用psapi,可惜我只会C。
 
PSAPI我用过,什么都得不到, 都是????,不知道我的程序那出了问题,
还有啊,《DELPHI开发人员指南》上的这个方面的论述是错的,2000支持Thelp32函数!!!
 
要用TlHelp32这个单元,不是shellapi,任务管理器的应用程序是在任务栏中出现图标的
用户进程,你那样做可能会杀掉系统进程;《DELPHI开发人员指南》上有你那段源码,
我看过的,目前的问题是找到所有进程之后,如何区分是用户进程还是系统进程!
 
TO yfdciom:
我记错了Thelp32函数的单元,谢谢指正。
那段代码我看过了,很难区分用户进程和系统进程,除了哪个ID=0的是系统进程外,
其他如果是系统进程,在2000下无法关闭,他们都是些服务类型。用我上面的写的
哪个terminateProcess根本无法关掉,这点可以放心。
 
TO张无忌:
我正在研究如何区分用户进程和系统进程!你也试一试
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部