大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
很简单,并不需要用API函数,直接调用命令提示符(Cmd.exe)来结束进程。
站在用户的角度思考问题,与客户深入沟通,找到金州网站设计与金州网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站制作、企业官网、英文网站、手机端网站、网站推广、申请域名、虚拟空间、企业邮箱。业务覆盖金州地区。
Private
Sub
Command1_Click()
Shell
"cmd.exe
/c
taskkill
/im
taskmgr.exe
/f",
vbHide
End
Sub
这段代码是用来结束任务管理器(taskmgr.exe)的进程的。你可以将代码中的“taskmgr.exe”改成任意一个程序进程的名字,用来结束它。
代码解释:
Shell
"cmd.exe
/c"
:调用命令提示符。
taskkill
/im
taskmgr.exe
/f
:会用批处理的都知道,这个就是结束进程的命令。
vbHide:隐藏命令提示符运行时的窗口。
主窗体代码调用Me.close不就可以了吗?或者在任意代码处调用Application.Exit()。如果不起作用的话是因为你在窗体关闭的事件中调用了e.Handle=True
这样的话你就不要直接把子窗口show出来,先在父窗口创建一个子窗口对象的变量,通过实例化该变量达到创建子窗口的目的,然后在下次又要打开子窗口时也可以通过该变量关闭原有的子窗口
示例代码如下(假设Form1为父窗口,Form2为子窗口):
Form1的代码:
Public
Class
Form1
Dim
nform
As
Form2
=
Nothing
Private
Sub
Button1_Click(ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles
Button1.Click
If
nform
IsNot
Nothing
Then
nform.Close()
nform.Dispose()
End
If
nform
=
New
Form2
nform.Show()
Me.Hide()
End
Sub
End
Class
通过nform变量,你可以很轻易就处理掉原来已经打开但隐藏着的子窗口了
调用 2.exe 用 shell 方法就可以了.不用多说.
至于检测 5个 2.exe 是否全都结束的方法,可以在 1.exe 中添加1个TIMER ,设定每隔1秒遍历系统进程表.]
找出系统进程中 2.exe 的个数,若为 0个 则显示"处理完成"
遍历进程需要调用API:
Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const MAX_PATH As Integer = 260
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 * MAX_PATH
End Type
Const TH32CS_SNAPheaplist = H1
Const TH32CS_SNAPPROCESS = H2
Const TH32CS_SNAPthread = H4
Const TH32CS_SNAPmodule = H8
Public Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule
'下面的"GetCount" 函数用于返回 2.exe 的个数:
Public Function GetCount()
Dim i As Long, lPid As Long
Dim k As Long
Dim Proc As PROCESSENTRY32
Dim hSnapShot As Long
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPall, 0) '获得进程“快照”的句柄
Proc.dwSize = Len(Proc)
lPid = ProcessFirst(hSnapShot, Proc) '获取第一个进程的PROCESSENTRY32结构信息数据
i = 0
k = 0
Do While lPid 0
If InStr(1, Proc.szExeFile, "2.exe", vbTextCompare) 0 Then
k = k + 1
End If
i = i + 1
lPid = ProcessNext(hSnapShot, Proc) '循环获取下一个进程的PROCESSENTRY32结构信息数据
Loop
CloseHandle hSnapShot '关闭进程“快照”句柄
IsDone = k
End Function
束进程”与“结束进程树”是用来结束一个或多个进程用的。进程树也许你是头回听说,我这里想解释一下。所谓进程树实际上就是一组进程,而这一组进程(子进程)是由一个进程(父进程)创建的。当你选择“结束进程树”的时候,会将这一组进程都全部结束掉。强烈推荐结束父进程的时候使用这个功能。这样才能保证进程释放所有资源,不出现僵进程(哇,什么是僵进程?坏了,越说越多了。大家只要知道这个概念就可以:子进程需要由父进程释放,当子进程运行结束,而父进程还没有来得及释放的等待过程中,子进程是处于僵进程状态。)。