100分急如何关闭未知已打开的外部程序及窗口?(kingRon不要忘了进来) (100分)

  • 主题发起人 主题发起人 lls88
  • 开始时间 开始时间
L

lls88

Unregistered / Unconfirmed
GUEST, unregistred user!
因有特别要求,我想实现当我的程序运行时,能够自动关闭
其它所有已运行的程序.
 
我只知道用枚举的方法,可以找出所有正在运行的程序。具体的代码,可以问kingRon要!
 
///你可以修改下面的代码,把不是Explorer.exe的都Kill调即可。
uses tlhelp32;
假设要终止的程序的文件名为:project2.exe,那么例程如下:
var
lppe:tprocessentry32;
sshandle:thandle;
hh:hwnd;
found:boolean;
begin
sshandle:=createtoolhelp32snapshot(TH32CS_SNAPALL,0);
found:=process32first(sshandle,lppe);
while found do
begin
//进行你的处理其中lppe.szExefile就是程序名。
if uppercase(extractfilename(lppe.szExeFile))='PROJECT2.EXE' then
begin
hh:=OpenProcess(PROCESS_ALL_ACCESS,true,lppe.th32ProcessID);
TerminateProcess(hh,0);
end;
found:=process32next(sshandle,lppe);
end;
end;
********************
HANDLE hProcess
Windows NT/2000: The handle must have PROCESS_TERMINATE access.
For more information, see Process Security and Access Rights.

所以要先使用
DWORD SetSecurityInfo(
HANDLE handle, // handle to object
SE_OBJECT_TYPE ObjectType, // object type
SECURITY_INFORMATION SecurityInfo, // buffer
PSID psidOwner, // new owner SID
PSID psidGroup, // new primary group SID
PACL pDacl, // new DACL
PACL pSacl // new SACL
);
 
Kingron的作法是先要知道程序名,
问题是我不知道用户安装了那些程序.
我要的结果是只要是用户已运行的程序及打开的窗口
都全部关闭.
 
利用screen,全屏幕查找,找到一个关闭一个
 
一剑封喉,如何实现呢?
有详细代码吗?
 
哎呀,你把那个
if uppercase(extractfilename(lppe.szExeFile))='PROJECT2.EXE' then
修改一下看看?例如:
Temp:=uppercase(extractfilename(lppe.szExeFile));
if (Temp<>'EXPLORER.EXE') or (Temp<>'INTRANET.EXE') or (Temp<>'你要保留的程序') then
begin
///Kill it!这下应该明白了吧?亏得我还作了说明。
end;

如果你不喜欢这种方法,也可以用EnumWindow() 配合回调函数,Close所有的Window即可。都很简单。
 
Kingron,用你的方法一执行就会死机。
 
晕倒,这是你列出来的程序不够多,你难道不会自己变通一下吗?因为上面的程序会把系统的
Rundll.exe,Kenerl.dll等等都Kill掉,系统当然会4掉了,你干脆用EnumWindow()来关闭所有的
窗口算了!!!!!

不要问我要代码,这个题目我拒绝再回答~~~~~~~~~~~,连举一反三、触类旁通都不会,我再怎么
回答可能都是浪费力气~~~~~~~
 
接受答案了.
 

Similar threads

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