很簡單,并不需要用API函數(shù),直接調(diào)用命令提示符(Cmd.exe)來結(jié)束進程。
站在用戶的角度思考問題,與客戶深入溝通,找到金州網(wǎng)站設(shè)計與金州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、虛擬空間、企業(yè)郵箱。業(yè)務覆蓋金州地區(qū)。
Private
Sub
Command1_Click()
Shell
"cmd.exe
/c
taskkill
/im
taskmgr.exe
/f",
vbHide
End
Sub
這段代碼是用來結(jié)束任務管理器(taskmgr.exe)的進程的。你可以將代碼中的“taskmgr.exe”改成任意一個程序進程的名字,用來結(jié)束它。
代碼解釋:
Shell
"cmd.exe
/c"
:調(diào)用命令提示符。
taskkill
/im
taskmgr.exe
/f
:會用批處理的都知道,這個就是結(jié)束進程的命令。
vbHide:隱藏命令提示符運行時的窗口。
主窗體代碼調(diào)用Me.close不就可以了嗎?或者在任意代碼處調(diào)用Application.Exit()。如果不起作用的話是因為你在窗體關(guān)閉的事件中調(diào)用了e.Handle=True
這樣的話你就不要直接把子窗口show出來,先在父窗口創(chuàng)建一個子窗口對象的變量,通過實例化該變量達到創(chuàng)建子窗口的目的,然后在下次又要打開子窗口時也可以通過該變量關(guān)閉原有的子窗口
示例代碼如下(假設(shè)Form1為父窗口,F(xiàn)orm2為子窗口):
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變量,你可以很輕易就處理掉原來已經(jīng)打開但隱藏著的子窗口了
調(diào)用 2.exe 用 shell 方法就可以了.不用多說.
至于檢測 5個 2.exe 是否全都結(jié)束的方法,可以在 1.exe 中添加1個TIMER ,設(shè)定每隔1秒遍歷系統(tǒng)進程表.]
找出系統(tǒng)進程中 2.exe 的個數(shù),若為 0個 則顯示"處理完成"
遍歷進程需要調(diào)用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" 函數(shù)用于返回 2.exe 的個數(shù):
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結(jié)構(gòu)信息數(shù)據(jù)
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) '循環(huán)獲取下一個進程的PROCESSENTRY32結(jié)構(gòu)信息數(shù)據(jù)
Loop
CloseHandle hSnapShot '關(guān)閉進程“快照”句柄
IsDone = k
End Function
束進程”與“結(jié)束進程樹”是用來結(jié)束一個或多個進程用的。進程樹也許你是頭回聽說,我這里想解釋一下。所謂進程樹實際上就是一組進程,而這一組進程(子進程)是由一個進程(父進程)創(chuàng)建的。當你選擇“結(jié)束進程樹”的時候,會將這一組進程都全部結(jié)束掉。強烈推薦結(jié)束父進程的時候使用這個功能。這樣才能保證進程釋放所有資源,不出現(xiàn)僵進程(哇,什么是僵進程?壞了,越說越多了。大家只要知道這個概念就可以:子進程需要由父進程釋放,當子進程運行結(jié)束,而父進程還沒有來得及釋放的等待過程中,子進程是處于僵進程狀態(tài)。)。
分享文章:vb.net結(jié)束多個進程 vb結(jié)束指定進程
當前鏈接:http://muchs.cn/article16/hgepgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、云服務器、定制網(wǎng)站、虛擬主機、手機網(wǎng)站建設(shè)、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)