VB.Net按标题关闭窗口

时间:2012-06-29 01:51:15

标签: vb.net api window

我正在搜索按标题关闭特定窗口的方法。

我试过Process.GetProcessesByName;但不是特别适用于这种情况。

我正在使用API​​或类似方法搜索方法(不在C#中,我看到几个代码但在vb.net中无法正常工作)

谢谢!


更新

感谢您的回复。但是我在下面描述的解决方案仍然存在问题。 我有一个控制两个窗口的唯一进程。然后,如果我关闭(或杀死)Window#2,立即关闭第一个(见图像)。

由于这个原因,我认为从使用API​​方法开始。

我只想关闭第二个窗口。

Screenshot

2 个答案:

答案 0 :(得分:5)

尝试使用类似的东西。使用Process.MainWindowTitle获取标题文本并Process.CloseMainWindow关闭UI,它比杀死进程更优雅。

注意:包含区分大小写的搜索

Imports System.Diagnostics
Module Module1

    Sub Main()
        Dim myProcesses() As Process = Process.GetProcesses

        For Each p As Process In myProcesses
            If p.MainWindowTitle.Contains("Notepad") Then
                p.CloseMainWindow()
            End If
        Next

    End Sub

End Module

就Win API函数而言,尝试这样的事情。请注意,如果您关闭父窗口, 也会关闭孩子。

Module Module1
    Private Declare Auto Function FindWindowEx Lib "user32" (ByVal parentHandle As Integer, _
                                               ByVal childAfter As Integer, _
                                               ByVal lclassName As String, _
                                               ByVal windowTitle As String) As Integer

    Private Declare Auto Function PostMessage Lib "user32" (ByVal hwnd As Integer, _
                                                            ByVal message As UInteger, _
                                                            ByVal wParam As Integer, _
                                                            ByVal lParam As Integer) As Boolean

    Dim WM_QUIT As UInteger = &H12
    Dim WM_CLOSE As UInteger = &H10


    Sub Main()
        Dim handle As Integer = FindWindowEx(0, 0, Nothing, "YourFormsTitle")
        PostMessage(handle, WM_CLOSE, 0, 0)
    End Sub

End Module

答案 1 :(得分:0)

您尚未向我们展示您的代码段。也许你可以尝试这个。

Dim processList() As Process
processList = Process.GetProcessesByName(ListBox1.Items(ListBox1.SelectedIndex).ToString)

For Each proc As Process In processList
    If MsgBox("Terminate " & proc.ProcessName & "?", MsgBoxStyle.YesNo, "Terminate?") = MsgBoxResult.Yes Then
        Try
            proc.Kill()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End If
Next

在上面的代码段中,我在listBox上有一个窗口标题列表。该片段将迭代列表框以获取窗口标题,如果找到了标题,则会询问消息是否终止该过程。