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
    Else
        IsTaskRunning = True
    End If
   

 IsTaskRunning_Exit:
        Exit Function


 IsTaskRunning_Eh:
    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
    Else
    'close application
        If Not (GetWindowLong(TargetHwnd, GWL_STYLE) And WS_DISABLED) Then
            X = PostMessage(TargetHwnd, WM_CLOSE, 0, 0&)
            DoEvents
        End If
    End If
   
    GoTo EndTaskSucceed


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


 EndTaskSucceed:
    ReturnVal = True


 EndTaskEndSub:
    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
LVL 5
gigglickAsked:
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....

Regards,

Rob.
0
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.