我正在搜索按标题关闭特定窗口的方法。
我试过Process.GetProcessesByName
;但不是特别适用于这种情况。
我正在使用API或类似方法搜索方法(不在C#中,我看到几个代码但在vb.net中无法正常工作)
谢谢!
更新
感谢您的回复。但是我在下面描述的解决方案仍然存在问题。 我有一个控制两个窗口的唯一进程。然后,如果我关闭(或杀死)Window#2,立即关闭第一个(见图像)。
由于这个原因,我认为从使用API方法开始。
我只想关闭第二个窗口。
答案 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
上有一个窗口标题列表。该片段将迭代列表框以获取窗口标题,如果找到了标题,则会询问消息是否终止该过程。