2

我正在寻找一种按标题关闭特定窗口的方法。

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

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

谢谢!


更新

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

由于这个原因,我认为从乞讨中使用 API 方法。

我只想关闭第二个窗口。

截屏

4

2 回答 2

6

尝试使用这样的东西。用于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
于 2012-06-29T02:05:06.033 回答
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。该片段将迭代窗口标题的列表框,如果找到标题,它会询问是否终止进程的消息。

于 2012-06-29T02:04:34.557 回答