2012-06-29 38 views
1

我正在按标题搜索关闭特定窗口的方法。我试过Process.GetProcessesByName;但不是特别在这种情况下工作。VB.Net按标题关闭窗口

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

谢谢!


UPDATE

感谢您的答复。但我仍然遇到下面描述的解决方案问题。 我有一个控制两个窗口的唯一进程。然后,如果我关闭(或杀死)2号窗口,立即关闭第一个窗口(请参阅图像)。

由于这个原因,我想在使用API​​方法从乞讨。

我只想关闭第二个窗口。

Screenshot

回答

3

尝试使用类似这样的东西。使用Process.MainWindowTitle获得标题文本和Process.CloseMainWindow关闭用户界面,它比杀死进程更优美。

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

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 

至于赢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 
+0

感谢您的答复马克,但仍然有问题与您的解决方案。在第一篇文章中看到我的评论 – MiBol

+1

@MiBol所以我按照你所说的来收集,你的过程有多个窗口,你想关闭其中一个窗口而不是另一个窗口? –

+0

没错,但是如果我关闭窗口#2(在图像中),自动关闭窗口#1。如果我手动这样做,这不会发生。 – MiBol

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。片段将迭代窗口标题的列表框,并且如果标题已找到,它会要求一条消息来终止该过程。

+0

非常感谢您的解决方案。但是,我仍然有问题,请参阅第一篇文章以获取更多信息。 – MiBol