VB6 Close a program

HI - I am using the below code to close and open a program.  The open portion works fine, however, the close portion is not working. TargetHwnd keeps getting a zero value.  Anyone know a better way of doing this? I am using ClickYes in order to suppress some Outlook prompts but I don't want to leave it running on the machine once the job is complete (for obvious reasons).

'API's Function Declarations

 Private Declare Function IsWindow Lib "user32" (ByVal hwnd As Long) As Long

 Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _
    ByVal hwnd As Long, _
    ByVal nIndex As Long) As Long

 Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" ( _
    ByVal hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) As Long

 Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
    ByVal lpClassName As Any, _
    ByVal lpWindowName As String) As Long

 'API Constants

 Public Const GWL_STYLE = -16

 Public Const WS_DISABLED = &H8000000

 Public Const WM_CANCELMODE = &H1F

 Public Const WM_CLOSE = &H10

 Public Function IsTaskRunning(sWindowName As String) As Boolean
    Dim hwnd As Long, hWndOffline As Long
    On Error GoTo IsTaskRunning_Eh
    'get handle of the application
    'if handle is 0 the application is currently not running
    hwnd = FindWindow(0&, sWindowName)
    If hwnd = 0 Then
        IsTaskRunning = False
        Exit Function
        IsTaskRunning = True
    End If

        Exit Function

    Call ShowError(sWindowName, "IsTaskRunning")

 End Function

 Public Function EndTask(sWindowName As String) As Integer
    Dim X As Long, ReturnVal As Long, TargetHwnd As Long
    'find handle of the application
    TargetHwnd = FindWindow(0&, sWindowName)
    If TargetHwnd = 0 Then Exit Function
    If IsWindow(TargetHwnd) = False Then
        GoTo EndTaskFail
    'close application
        If Not (GetWindowLong(TargetHwnd, GWL_STYLE) And WS_DISABLED) Then
            X = PostMessage(TargetHwnd, WM_CLOSE, 0, 0&)
        End If
    End If
    GoTo EndTaskSucceed

    ReturnVal = False
    MsgBox "EndTask: cannot terminate " & sWindowName & " task"
    GoTo EndTaskEndSub

    ReturnVal = True

    EndTask% = ReturnVal

 End Function

 Public Function ShowError(sText As String, sProcName As String)
   'this function displays an error that occurred
    Dim sMsg As String
    sMsg = "Error # " & Str(Err.Number) & " was generated by " _
         & Err.Source & vbCrLf & Err.Description
    MsgBox sMsg, vbCritical, sText & Space(1) & sProcName
    Exit Function

 End Function
Who is Participating?
RobSampsonConnect With a Mentor Commented:
Have you made sure that your sWindowName is exactly correct, when passed to the FindWindow function?  It must be exactly the same title as that in the title bar of the application, which, for Microsoft Outlook, probably changes at each different view....


Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.