如何激活和杀掉某一个进程?(200分)

  • 主题发起人 主题发起人 php1
  • 开始时间 开始时间
P

php1

Unregistered / Unconfirmed
GUEST, unregistred user!
  这已经不是什么新鲜的问题了。以前也有很多人解决过类似的
问题。但是我看那些例子看不懂,只好出重金求答案。
  有如下程序片段:
......
var
mainform: Tmainform;
l : Tlist; ////返回的东东在"L"这个TList中。

type
TProcessInfo = Record
ExeFile : String;
ProcessID : DWORD;
end;
pProcessInfo = ^TProcessInfo;


implementation

{$R *.DFM}

procedure Tmainform.B_StartClick(Sender: TObject);
var
p : pProcessInfo;
lppe: TProcessEntry32;
found : boolean;
Hand : THandle;
begin
lb_show.Items.Clear;
l.Clear;
Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
lppe.dwSize:=sizeof(lppe);
found := Process32First(Hand,lppe);
if not found then begin
showmessage('Found false!');
exit;
end;
while found do begin
New(p);
p.ExeFile := lppe.szExeFile;
p.ProcessID := lppe.th32ProcessID;
l.Add(p);
lb_show.Items.Add(p.exefile);
found := Process32Next(Hand,lppe);
end;
end;
......
  我如何根据上面得到的p,激活或者杀掉某一个进程?请写出程序段。
如果上面的有错误,应该怎样改?然后又怎样激活或者杀掉?
 
根据进程 ID 杀掉进程的函数如下:
procedure KillProcess(dwProcessId: DWORD);
var
ProcHandle: THandle;
begin
ProcHandle := OpenProcess(1, FALSE, dwProcessID);
try
if ProcHandle <> 0 then
begin
if TerminateProcess(ProcHandle, $FFFFFFFF) then
WaitForSingleObject(ProcHandle, INFINITE);
end;
finally
CloseHandle(ProcHandle);
end;
end;
你可以这样调用 KillProcess(p.ProcessID);
 
杀掉一个进程调用API,
BOOL TerminateProcess(
HANDLE hProcess, // handle to the process
UINT uExitCode // exit code for the process
);

VOID ExitProcess(
UINT uExitCode // exit code for all threads
);
进程不能Suspend,所以无法激活;
不过希望你能这样做:
你可以找进程下的所有线程,对线程操作要方便的多且安全的多.
 
Croco的答案,我测试过的确不错。但是,人心不足,当我企图用这个程序
来杀江民的“KVW3000 实时监视器 - KVWMon”的时候,问题来了。
  KillProcess(p.ProcessID)会进入运行:
WaitForSingleObject(ProcHandle, INFINITE);
一会后,就会(没有响应)。不过,KVWMon也很伤,图标没了。为什么会
这样?
  另外,对于IE有时会一杀就是几个窗口(这样很容易杀错良民。),大概
这是一个进程下的几个线程吧!取线程的ID应该是用Thread32First和
Thread32Next吧。但是好象不能直接用这两个函数来替代上例中的
Process32First和Process32Next,显示:
[Error] main_form.pas(88): Types of actual and formal var
parameters must be identical
而我看的资料这两对函数的参数好象是一样的。为什么会出错?
 
  用这些方法来杀进程,会不会清除该进程所占的内存?对系统的稳定性有没有
影响?
 
PHP1大哥:
小弟不能下载,能把题目和好的答案给我吗?
THANKS E-MAIL:renyi163@yeah.net
 
  用这些方法来杀进程,会不会清除该进程所占的内存?对系统的稳定性有没有
影响?
 
当然会清除该process占用的所有内存,对系统稳定性也应该不会有影响,
只会对被中止的process造成影响,比方说不能保存当前数据之类的
 
这就不关我事了,只要能完全清除该process占用的所有内存,对系统稳定性不会有影响就行了。
 
多人接受答案了。
 
后退
顶部