How do I close a child window with its handle?

I want to close a window after a match a specific pattern.  What's the best way to close the window?

In the below example if the WindowText has "News" within it I want to close that window.

Thanks for you help.

CODE:

  Public Function EnumWindowsCallBack(ByVal hwnd As IntPtr, ByVal lParam As Int32) As Int32
        Dim sSave As String
 
        'Get the windowtext length
        sSave = Space(GetWindowTextLength(hwnd) + 1)
 
        'get the window text
        GetWindowText(hwnd, sSave, Len(sSave))
 
        'remove the last Chr(0)
        sSave = Microsoft.VisualBasic.Left(sSave, Len(sSave) - 1)

        If sSave.IndexOf("News") >= 0 Then
            'WANT TO CLOSE WINDOW
        Else
               If (sSave.Length <> 0) Then
 
                   Lst.Items.Add(sSave)

               End If
            End If
        End If
        If sSave.Trim <> "" Then
            Debug.WriteLine(sSave)
        End If
 
        Return 1 'continue enumeration        
    End Function
LVL 1
vaultworldAsked:
Who is Participating?
 
Mike TomlinsonConnect With a Mentor Middle School Assistant TeacherCommented:
Get the "root" window using GetAncestor() with GA_ROOT.  Then send a WM_CLOSE directive with SendMessage():

Public Const GA_ROOT As Integer = 2
Public Declare Function GetAncestor Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal gaFlags As Integer) As IntPtr
 
Public Const WM_CLOSE As Integer = &H10
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
 
...
    Dim rootWindow As IntPtr = GetAncestor(hwnd, GA_ROOT)
    SendMessage(rootWindow, WM_CLOSE, 0, 0)

Open in new window

0
 
Smart_ManCommented:
here is how to get the window handle

me.handle

to close a window you can use

unload me

among a lot other ways to do so.

waiting for your reply
0
 
ladarlingCommented:
You need to send the WM_CLOSE message to the Window.

 Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As UInt32) As Long
Public Const WM_CLOSE = &H10

Open in new window

0
Cloud Class® Course: Microsoft Azure 2017

Azure has a changed a lot since it was originally introduce by adding new services and features. Do you know everything you need to about Azure? This course will teach you about the Azure App Service, monitoring and application insights, DevOps, and Team Services.

 
ladarlingCommented:
A sample call might be:

Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As UInt32) As Long
Public Const WM_CLOSE = &H10
 
SendMessage(windowHandle, WM_CLOSE,0,0)
 
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
@ladarling...that's a VB6 declaration with "Long" in it...  =\
0
 
ladarlingCommented:
My bad.
 
0
 
vaultworldAuthor Commented:
Thanks again,

Now that i have the size and position of the window.

I did have another idea on closing the application simply send a mouse click to the "X" in the upper right to close it.

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.