vb创建的active.exe怎么结束他的进程呢?

yuanxy 2002-09-24 10:01:28
这是进程代码?
Private frmTimeClock As frmClock
Private WithEvents oTimer As Timer
Public Event JobStart()
Public Event JobEnd()

Private Sub Class_Initialize()
Set frmTimeClock = New frmClock
Load frmTimeClock
Set oTimer = frmTimeClock.timClock
oTimer.Enabled = False
End Sub

Private Sub Class_Terminate()
Set oTimer = Nothing
Unload frmTimeClock
End Sub

Public Sub StartJob()
oTimer.Interval = 100
oTimer.Enabled = True
End Sub

Private Sub doBigJob()
Dim lngTemp As Long, lngSum As Long
For lngTemp = 1 To 1000000000
lngSum = lngSum + 1
Next
End Sub

Private Sub oTimer_timer()
oTimer.Enabled = False
RaiseEvent JobStart
doBigJob
RaiseEvent JobEnd
End Sub
这是调用进程的代码
Option Explicit
Dim WithEvents myJob As BigJob

Private Sub cmdStart_Click()
myJob.StartJob
End Sub

Private Sub Form_Load()
Set myJob = New BigJob
End Sub

Private Sub Form_Unload(Cancel As Integer)
Set myJob = Nothing
End Sub

Private Sub myJob_JobEnd()
lblMessage.Caption = "任务完成!"
End Sub

Private Sub myJob_JobStart()
lblMessage.Caption = "正在执行任务..."
End Sub

Private Sub timClock_Timer()
lblTime.Caption = Format(Now, "HH:NN:SS")
End Sub

我如果不等进程结束而关闭窗口他会出现一个切换按钮,请问各位高手怎么结束这个进程,还有进程之间可以通信吗?谢谢
...全文
177 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
laolin 2002-09-26
  • 打赏
  • 举报
回复
试试看这个办法:

1. 在你的进程程序中加个Cancel Flag
Public Cancel As Boolean

2.在处理中加入取消操作,最好再插入一个DoEvents
Private Sub doBigJob()
Dim lngTemp As Long, lngSum As Long
For lngTemp = 1 To 1000000000
If Cancel Then Exit For
DoEvents
lngSum = lngSum + 1
Next
End Sub

3.结束进程时,先取消进程处理
Private Sub Form_Unload(Cancel As Integer)
myJob.Cancel = True
Set myJob = Nothing
End Sub
Ah 2002-09-26
  • 打赏
  • 举报
回复
就是用API函数
OpenProcess 来打开进程
TerminateProcess 结束进程

就这么简单
junwhj 2002-09-25
  • 打赏
  • 举报
回复
'仅供参考

VERSION 5.00
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
Begin VB.Form Form1
Caption = "进程管理"
ClientHeight = 3150
ClientLeft = 60
ClientTop = 345
ClientWidth = 7080
LinkTopic = "Form1"
ScaleHeight = 3150
ScaleWidth = 7080
StartUpPosition = 3 '窗口缺省
Begin MSComctlLib.ListView ListView1
Height = 2415
Left = 120
TabIndex = 3
Top = 120
Width = 6855
_ExtentX = 12091
_ExtentY = 4260
LabelWrap = -1 'True
HideSelection = -1 'True
_Version = 393217
ForeColor = -2147483640
BackColor = -2147483643
BorderStyle = 1
Appearance = 1
NumItems = 0
End
Begin VB.CommandButton cmdTerminate
Caption = "结束进程"
Height = 375
Left = 4680
TabIndex = 2
Top = 2640
Width = 1095
End
Begin VB.CommandButton cmdQuit
Caption = "退出"
Height = 375
Left = 5880
TabIndex = 1
Top = 2640
Width = 1095
End
Begin VB.CommandButton cmdRefresh
Caption = "刷新"
Height = 375
Left = 3480
TabIndex = 0
Top = 2640
Width = 1095
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

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 hSapshot As Long, lppe As PROCESSENTRY32) As Long

Private Declare Function TerminateProcess Lib "kernel32" _
(ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long

Private Type PROCESSENTRY32
dwSize As Long
cntUseage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
swFlags As Long
szExeFile As String * 1024
End Type

Private Const TH32CS_SNAPPROCESS = &H2
Private Const PROCESS_TERMINATE = &H1


Private Sub Form_Load()
ListView1.View = lvwReport
ListView1.ColumnHeaders.Add , , "文件名", 5000
ListView1.ColumnHeaders.Add , , "进程ID", 1500
Call ShowProcessInfo
End Sub


Private Sub cmdRefresh_Click()
Call ShowProcessInfo
End Sub


Private Sub cmdTerminate_Click()
Dim lngProcess As Long

If ListView1.SelectedItem Is Nothing Then
Exit Sub
End If

lngProcess = OpenProcess(PROCESS_TERMINATE, _
0&, _
Val(ListView1.SelectedItem.SubItems(1)))
Call TerminateProcess(lngProcess, 1&)
Call CloseHandle(lngProcess)
Call ShowProcessInfo
End Sub


Private Sub cmdQuit_Click()
Unload Me
End Sub


Private Sub ShowProcessInfo()
Dim pe As PROCESSENTRY32
Dim r As Long, i As Long
Dim ListItemX As ListItem

ListView1.ListItems.Clear
r = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If r <> 0 Then
pe.dwSize = 1060
Process32First r, pe
Set ListItemX = ListView1.ListItems.Add(, , GetFileName(pe.szExeFile))
ListItemX.SubItems(1) = pe.th32ProcessID
Do
i = Process32Next(r, pe)
If i > 0 Then
Set ListItemX = ListView1.ListItems.Add(, , GetFileName(pe.szExeFile))
ListItemX.SubItems(1) = pe.th32ProcessID
Else
Exit Do
End If
Loop
End If
End Sub


Private Function GetFileName(strFullPath As String) As String
GetFileName = Left(strFullPath, InStr(1, strFullPath, Chr(0)))
End Function
yuanxy 2002-09-25
  • 打赏
  • 举报
回复
太深奥了,来点简单的有吗?
yuanxy 2002-09-24
  • 打赏
  • 举报
回复
我自己up

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧