terminate the process(VB怎么用TerminateProcess关闭进程)

本文目录
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 Long a = 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 ’ 打开进程ID Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF ’最大权限打开进程 Private Declare Function GetWindowThreadProcessId Lib “user32“ (ByVal hwnd As Long, lpdwProcessId As Long) As Long ’获取PID Private Declare Function TerminateProcess Lib “kernel32“ (ByVal hProcess As Long, ByVal uExitCode As Long) As Long ’结束进程ID Private Sub Command1_Click() Dim a As Long, b As Long, c As Long a = FindWindow(vbNullString, “abc.exe“) GetWindowThreadProcessId a, b c = OpenProcess(&H1F0FFF, False, b) TerminateProcess c, 0 CloseHandle cEnd Sub重新写了个,跟据你的意思来的,我的自己简化了,省了好多代码,你看不明白。 补充: 思路是这样的,先找窗口取得句柄(findwindow),然后通过句柄取得PID(GetWindowThreadProcessId),然后通过PID打开进程(OpenProcess),然后结束进程(TerminateProcess c),最后关闭进程(CloseHandle)。只要学懂这几个API就好理解了。 追问: 上面那段放在标准模块还是类模块, Private Sub Command1_Click() Dim a As Long, b As Long, c As Long a = FindWindow(vbNullString, “abc.exe“) If a 《》 0 Then GetWindowThreadProcessId a, b c = OpenProcess(&H1F0FFF, False, b) CloseHandle cElseMsgBox “程序未打开!“, 16, “提示“End IfEnd Sub这样就不会错了,TerminateProcess本身不是很好用,应该不能结束系统进程吧,不然也会出错的。这个API本身功能不高。
TerminateProcess使用方法
在win7上,VS2010开发环境中,写一个守护进程的程序,程序内容:发现目标进程挂起后,将其kill,然后重启。可是,遇到了一个问题,就是在使用TerminateProcess进行kill目标进程时,kill失败,利用GetLastError()获取错误代码为5,“5”表示拒绝访问。
有2中解决方法:
方法1:获取管理员权限。
在应用程序的Manifest禁用UAC Virtualization,取消其对数据写操作的重定向。具体做法:项目--》***属性--》连接器--》清单文件,我们设置启用UAC(Enable User Account Control),并且在UAC Execution Level中设置请求管理员权限。这样,应用程序在启动的时候,就会向用户请求管理员权限,当应用程序获得管理员执行权限后,当然可以向任意目录写入数据,UAC Virtualization也就不会起作用了。
方法2:在OpenProcess的时候权限设置的不对。
原因是OpenProcess是设置的权限不够,应该加上PROCESS_TERMINATE权限,具体可参考MSDN中的OpenProcess函数的说明。
将参数DWORDexitCode 设置成PROCESS_ALL权限即可使用。
TerminateProcess结束进程的具体代码如下:
--------------------------------------------------------------------------
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID);
TerminateProcess(hProcess,uExitCode);
--------------------------------------------------------------------------

更多文章:
易语言网页api接口怎么调用(易语言,怎么读取网页json的api)
2026年10月11日 08:00
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40
another time(another time和other time的区别)
2026年10月11日 05:00








