我正在寻找一种按标题关闭特定窗口的方法。
我试过了Process.GetProcessesByName
;但不是特别适用于这种情况。
我正在使用 API 或类似方法搜索方法(不在 C# 中,我看到了一些代码,但在 vb.net 中无法正常工作)
谢谢!
更新
谢谢回复。但是我仍然对您在下面描述的解决方案有疑问。我有一个控制两个窗口的唯一进程。然后,如果我关闭(或杀死)第二个窗口,立即关闭第一个窗口(见图)。
由于这个原因,我认为从乞讨中使用 API 方法。
我只想关闭第二个窗口。
尝试使用这样的东西。用于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
您还没有向我们展示您的代码片段。也许你可以试试这个。
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
。该片段将迭代窗口标题的列表框,如果找到标题,它会询问是否终止进程的消息。