<br> 问题:如何激活和杀掉某一个进程? ( 积分:200, 回复:9, 阅读:136 )<br>分类:系统相关 ( 版主:luyear, zyy04 ) <br>来自:php1, 时间:2000-6-1 8:36:00, ID:257303 [显示:小字体 | 大字体] <br> 这已经不是什么新鲜的问题了。以前也有很多人解决过类似的<br>问题。但是我看那些例子看不懂,只好出重金求答案。<br> 有如下程序片段:<br>......<br>var<br> mainform: Tmainform;<br> l : Tlist; ////返回的东东在"L"这个TList中。<br><br>type<br> TProcessInfo = Record<br> ExeFile : String;<br> ProcessID : DWORD;<br> end;<br> pProcessInfo = ^TProcessInfo;<br><br><br>implementation<br><br>{$R *.DFM}<br><br>procedure Tmainform.B_StartClick(Sender: TObject);<br>var<br> p : pProcessInfo;<br> lppe: TProcessEntry32;<br> found : boolean;<br> Hand : THandle;<br>begin<br> lb_show.Items.Clear;<br> l.Clear;<br> Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);<br> lppe.dwSize:=sizeof(lppe);<br> found := Process32First(Hand,lppe);<br> if not found then begin<br> showmessage('Found false!');<br> exit;<br> end;<br> while found do begin<br> New(p);<br> p.ExeFile := lppe.szExeFile;<br> p.ProcessID := lppe.th32ProcessID;<br> l.Add(p);<br> lb_show.Items.Add(p.exefile);<br> found := Process32Next(Hand,lppe);<br> end;<br>end;<br>......<br> 我如何根据上面得到的p,激活或者杀掉某一个进程?请写出程序段。<br>如果上面的有错误,应该怎样改?然后又怎样激活或者杀掉?<br><br> <br> <br>来自:Croco, 时间:2000-6-1 9:13:00, ID:257335 <br>根据进程 ID 杀掉进程的函数如下:<br>procedure KillProcess(dwProcessId: DWORD);<br>var<br> ProcHandle: THandle;<br>begin<br> ProcHandle := OpenProcess(1, FALSE, dwProcessID);<br> try<br> if ProcHandle <> 0 then<br> begin<br> if TerminateProcess(ProcHandle, $FFFFFFFF) then<br> WaitForSingleObject(ProcHandle, INFINITE);<br> end;<br> finally<br> CloseHandle(ProcHandle);<br> end;<br>end;<br>你可以这样调用 KillProcess(p.ProcessID);<br><br><br> <br> <br>来自:Kill Night, 时间:2000-6-1 9:28:00, ID:257344 <br>杀掉一个进程调用API,<br>BOOL TerminateProcess(<br> HANDLE hProcess, // handle to the process<br> UINT uExitCode // exit code for the process<br>);<br>或<br>VOID ExitProcess(<br> UINT uExitCode // exit code for all threads<br>);<br>进程不能Suspend,所以无法激活;<br>不过希望你能这样做: <br>你可以找进程下的所有线程,对线程操作要方便的多且安全的多.<br> <br> <br>来自:php1, 时间:2000-6-10 12:02:00, ID:263832 <br>Croco的答案,我测试过的确不错。但是,人心不足,当我企图用这个程序<br>来杀江民的“KVW3000 实时监视器 - KVWMon”的时候,问题来了。<br> KillProcess(p.ProcessID)会进入运行:<br>WaitForSingleObject(ProcHandle, INFINITE);<br> 一会后,就会(没有响应)。不过,KVWMon也很伤,图标没了。为什么会<br>这样?<br> 另外,对于IE有时会一杀就是几个窗口(这样很容易杀错良民。),大概<br>这是一个进程下的几个线程吧!取线程的ID应该是用Thread32First和<br>Thread32Next吧。但是好象不能直接用这两个函数来替代上例中的<br>Process32First和Process32Next,显示:<br>[Error] main_form.pas(88): Types of actual and formal var <br>parameters must be identical<br> 而我看的资料这两对函数的参数好象是一样的。为什么会出错?<br><br><br> <br> <br>来自:honestman, 时间:2000-6-10 12:09:00, ID:263841 <br> 用这些方法来杀进程,会不会清除该进程所占的内存?对系统的稳定性有没有<br>影响?<br> <br> <br>来自:happy3001, 时间:2000-6-10 13:46:00, ID:263903 <br>PHP1大哥:<br> 小弟不能下载,能把题目和好的答案给我吗?<br> THANKS E-MAIL:renyi163@yeah.net<br> <br> <br>来自:php1, 时间:2000-6-15 8:13:00, ID:265391 <br> 用这些方法来杀进程,会不会清除该进程所占的内存?对系统的稳定性有没有<br>影响?<br> <br> <br>来自:sonicyouth, 时间:2000-6-15 8:50:00, ID:265417 <br>当然会清除该process占用的所有内存,对系统稳定性也应该不会有影响,<br>只会对被中止的process造成影响,比方说不能保存当前数据之类的<br> <br> <br>来自:php1, 时间:2000-6-15 12:42:00, ID:265571 <br>这就不关我事了,只要能完全清除该process占用的所有内存,对系统稳定性不会有影响就行了。<br> <br> <br>来自:php1, 时间:2000-7-4 8:21:00, ID:276116 <br>多人接受答案了。<br> <br> <br>得分大富翁:Croco-150,happy3001-5,honestman-5,Kill Night-25,sonicyouth-15, <br>p