打印

[原创] 怎样用vb结束一个进程啊?

怎样用vb结束一个进程啊?

怎样用vb结束一个进程啊?
各位大侠,求代码!!!

TOP

很简单。exitprocess函数就可以!
谢拉

TOP

ExitProcess 似乎只能结束自己。
使用API函数 TerminateProcess ,声明方法如下:
复制内容到剪贴板
代码:
Declare Function TerminateProcess Lib "kernel32" Alias "TerminateProcess" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
第一个参数 hProcess 是要结束的进程的句柄,第二个参数 uExitCode 是指定要结束的进程的退出代码,一般传递0就可以了。
函数执行成功返回一个非0值,失败返回0。
这个方法比较简单,强迫终止进程,但尽量不要使用。最好是用API函数 SendMessage 发送 WM_CLOSE 消息,这样才能让进程正常退出。

[ 本帖最后由 编程小猪 于 2008-7-28 20:32 编辑 ]
以子之,攻子之矛。

Deroemon

用 TerminateProcess 函数可以的
要学的东西真的好多啊...

TOP

TerminateProcess可以结束大部分的进程

但是SYSTEM的好象不能用它
如果LZ实在不明白,就新建个批处理就搞定了啊。。。
大概代码如下
复制内容到剪贴板
代码:
open "c:\ok.cmd" fot output as #1
pring #1,"@taskkill /im 进程名.exe"
close #1
shell "c:\ok.cmd",vbhide
DoEvents
Kill "c:\ok.cmd"
不就搞定了???不过在权限比较低的情况下就不行了,个人感觉一般都能满足需求的哦。。
没有绝对只有自己 低调做人高调做事

TOP

对啊,好像能直接Kill吧,XP系统不是还有个taskkill啊
漏洞和黑客研究群65440879本人QQ:6310855
TerminateProcess要知道句柄,不如调用taskkill简单
~~~~~~~~~~~~~~~

TOP

Option Explicit
'声明API
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * 260
End Type
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal ApphProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Private Const TH32CS_SNAPPROCESS = &H2&

'关闭指定名称的进程
Private Sub KillProcess(sProcess As String)
Dim lSnapShot As Long
Dim lNextProcess As Long
Dim tPE As PROCESSENTRY32
lSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
If lSnapShot <> -1 Then
tPE.dwSize = Len(tPE)
lNextProcess = Process32First(lSnapShot, tPE)
Do While lNextProcess
If LCase$(sProcess) = LCase$(Left(tPE.szExeFile, InStr(1, tPE.szExeFile, Chr(0)) - 1)) Then
Dim lProcess As Long
Dim lExitCode As Long
lProcess = OpenProcess(1, False, tPE.th32ProcessID)
TerminateProcess lProcess, lExitCode
CloseHandle lProcess
End If
lNextProcess = Process32Next(lSnapShot, tPE)
Loop
CloseHandle (lSnapShot)
End If
End Sub


Private Sub Command1_Click()
Call KillProcess("explorer.exe") '这里的explorer.exe就是要结束的进程
End Sub

效果还不错的,我结束进程都用这段代码的。。。

Processed in 0.110295 second(s), 5 queries, Gzip enabled