home *** CD-ROM | disk | FTP | other *** search
Visual Basic class definition | 1997-02-16 | 2.3 KB | 88 lines |
- VERSION 1.0 CLASS
- BEGIN
- MultiUse = -1 'True
- END
- Attribute VB_Name = "dwAppWatch"
- Attribute VB_GlobalNameSpace = False
- Attribute VB_Creatable = True
- Attribute VB_PredeclaredId = False
- Attribute VB_Exposed = True
- Option Explicit
- ' Copyright ⌐ 1997 by Desaware Inc. All Rights Reserved
-
- Private CallbackObject As Object
-
- ' Process handle to watch
- Private processhnd As Long
- Private nprocessid As Long
-
- ' Internal state machine for dwAppWatch object
- ' 0 - Idle
- ' 1 - Waiting on process to terminate
- ' 2 - Process has terminated
- Private state As Integer
-
- Public Property Get Signaled() As Boolean
- If state = 2 Then Signaled = True Else Signaled = False
- End Property
-
- ' Called by the timer routine
- Public Sub TimerEvent()
- Dim res&
- If state = 0 Or state = 2 Then Exit Sub
- res = WaitForSingleObject(processhnd, 0)
- Select Case res
- Case WAIT_OBJECT_0
- Call CloseHandle(processhnd)
- state = 2
- On Error GoTo cantcallback
- If Not (CallbackObject Is Nothing) Then
- CallbackObject.dwAppTerminated Me
- End If
- On Error GoTo 0
- ' Pull object off the timer list
- RemovingClass Me
-
- Case WAIT_FAILED
- Call CloseHandle(processhnd)
- state = 0
- End Select
- Exit Sub
- cantcallback:
- Resume Next
- End Sub
-
- Public Sub SetAppWatch(ByVal pid&)
- ' If we're already watching a process, error
- If state = 1 Then
- RaiseError 1, "dwAppWatch", "Application already attached"
- Exit Sub
- End If
- processhnd = OpenProcess(SYNCHRONIZE, True, pid)
- If processhnd = 0 Then
- RaiseError 2, "dwAppWatch", "Unable to open specified process"
- Exit Sub
- End If
- ' Set the new state
- nprocessid = pid
- state = 1
- ' Add this object to main collection
- WatchCollection.Add Me
- End Sub
-
- Public Property Get ProcessId() As Long
- ProcessId = nprocessid
- End Property
-
-
- ' Set the callback object - make sure it is valid
- Public Sub SetAppCallback(o As Object)
- If agIsValidName(o, "dwAppTerminated") = 0 Then
- RaiseError 3, "dwAppWatch", "Callback object function undefined"
- Exit Sub
- End If
-
- Set CallbackObject = o
- End Sub
-
-