如何关闭一正在运行的程序或进程?
如何关闭一正在运行的程序或进程? 问题点数:60、回复次数:10Top
1 楼zfpcb(我是你的传说)回复于 2002-09-19 09:14:49 得分 10
看看API,对于运行可见的程序,很好办,因为很容易得到他的窗体句柄,的到了窗体句柄就什么事都能做了,如发送消息 WM_SYSCOMMAND 就是一种方法,对于不可见进程可以同法,主要是得到进程句柄,就能很好的操作他了。Top
2 楼shanxia(山峡)回复于 2002-09-19 09:15:31 得分 0
Ctrl+F2:终止程序运行;Top
3 楼s_cube(竹子)回复于 2002-09-19 09:27:07 得分 10
关闭程序 如Foxmail
Var
I:Thandle;
begin
I:=FindWindow(nil,'Foxmail');
If I<>0 Then
SendMessage(I,WM_close,0,0);
end;
关闭进程
try
thread.Suspend;
thread.Terminate;
except
...
end;
Top
4 楼9igogo(就爱狗狗)回复于 2002-09-19 09:28:14 得分 10
转贴
(注意uses TLHelp32)
然后
var lppe: TProcessEntry32;
found : boolean;
Hand : THandle;
begin
Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
found := Process32First(Hand,lppe);
while found do
begin
ListBox.Items.Add(StrPas(lppe.szExeFile));//列出所有进程。
found := Process32Next(Hand,lppe);
end;
end;
/////////////////////////////////////////////////////
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[i]; Dispose(p); Delete(i); end;
end;
...
end.
Top
5 楼9igogo(就爱狗狗)回复于 2002-09-19 09:29:18 得分 10
继续转
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
);
Top
6 楼s_cube(竹子)回复于 2002-09-19 09:30:25 得分 0
倒 没看清问题
第二段是关闭线程Top
7 楼xiejiye(菩提树业)回复于 2002-09-19 09:47:08 得分 0
进来拿分!!!Top
8 楼air_line(永恒的心)回复于 2002-09-19 09:48:04 得分 10
application类的
halt or terminate方法。Top
9 楼wxzcsut(小王)回复于 2002-09-19 10:12:27 得分 0
halt(integer);Top
10 楼lyzq(海)回复于 2002-09-19 10:46:41 得分 10
application.terminateTop




