terminateprocess,terminateprocess delphi

http://www.itjxue.com  2023-01-23 14:27  来源:未知  点击次数: 

VB怎么用TerminateProcess关闭进程?

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpclassname As String, ByVal lpwindowname As String) As Long '查找窗口句柄Private Sub Command1_Click()Dim a As Longa = OpenProcess(H1F0FFF, False, 进程ID)TerminateProcess(a, 0)CloseHandle aEnd Sub补充: 代码有点多,弄得有点乱了知道PID的话,查找窗口句柄那个可以去了Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long '关闭进程Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long ' 打开进程IDPrivate Const PROCESS_ALL_ACCESS As Long = H1F0FFF '最大权限打开进程Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long '获取PIDPrivate Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long '结束进程IDPrivate Sub Command1_Click()Dim a As Long, b As Long, c As Longa = FindWindow(vbNullString, "abc.exe")GetWindowThreadProcessId a, bc = OpenProcess(H1F0FFF, False, b)TerminateProcess c, 0CloseHandle cEnd Sub重新写了个,跟据你的意思来的,我的自己简化了,省了好多代码,你看不明白。 补充: 思路是这样的,先找窗口取得句柄(findwindow),然后通过句柄取得PID(GetWindowThreadProcessId),然后通过PID打开进程(OpenProcess),然后结束进程(TerminateProcess c),最后关闭进程(CloseHandle)。只要学懂这几个API就好理解了。 追问: 上面那段放在标准模块还是类模块,Private Sub Command1_Click()Dim a As Long, b As Long, c As Longa = FindWindow(vbNullString, "abc.exe")If a 0 ThenGetWindowThreadProcessId a, bc = OpenProcess(H1F0FFF, False, b)CloseHandle cElseMsgBox "程序未打开!", 16, "提示"End IfEnd Sub这样就不会错了,TerminateProcess本身不是很好用,应该不能结束系统进程吧,不然也会出错的。这个API本身功能不高。

TerminateProcess怎么用?怎么获取explorer.exe的句柄?

先要用CreateToolHelp32Snapshot函数取得进程快照句柄,然后将进程逐个取出,判断如果szExeFile=explorer.exe那么就取它的thProcessID,取得ID后用OpenProcess取得进程句柄,再用TerminateProcess结束进程

为什么TerminateProcess不能结束进程解决思路

STARTUPINFO StartupInfo;//定义STARTUPINFO结构指针memset(StartupInfo,0,sizeof(STARTUPINFO));StartupInfo.cb = sizeof(STARTUPINFO);StartupInfo.dwFlags=STARTF_USESHOWWINDOW;StartupInfo.wShowWindow=SW_SHOW;PROCESS_INFORMATION ProcessInfo;if (!CreateProcess("D:\\Program Files\\Fluent.Inc\\ntbin\\ntx86\\gambit.exe" ,cmdline.GetBuffer(cmdline.GetLength()),NULL,NULL,FALSE,0,NULL,"E:\\zuoye\\gambit1",StartupInfo,ProcessInfo)){cout"Create Fail!"endl;exit(1);}else{cout"Success!"endl;}WaitForSingleObject(ProcessInfo.hProcess,INFINITE);}void main(){gambit();HANDLE han=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //取进程快照PROCESSENTRY32 lpp;lpp.dwSize=sizeof(PROCESSENTRY32);BOOL bo;bo=Process32First(han,lpp); //从快照里取第一个进程信息TCHAR *str1;while(bo){str1=lpp.szExeFile ;if(!strcmp(str1,"exceed.exe") || !strcmp(str1,"gambit.exe")){HANDLE han2=OpenProcess(1,TRUE,lpp.th32ProcessID); //取进程实例 PROCESS_TERMINATE//coutstr;TerminateProcess(han2,0); //关闭}bo=Process32Next(han,lpp); //取下一个进程信息}CloseHandle(han);------解决方案--------------------------------------------------------TerminateProcess结束进程是不安全的。这个进程最好没有带锁的资源。而你的这个里面好像用到了cout,虽然我不知道这个到底是否有没有锁,但是这个cout肯定是互斥的。这样就有可能导致了结束进程失败------解决方案--------------------------------------------------------先确定有没有执行到TerminateProcess------解决方案--------------------------------------------------------既然是windows 平台,那就用system 调用相关的 命令吧,system 执行 下面的命令, 绝大部分进程都能结束,方便实用。

(责任编辑:IT教学网)

更多

推荐免费资源文章