Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net按标题关闭窗口_Vb.net_Api_Window - Fatal编程技术网

VB.Net按标题关闭窗口

VB.Net按标题关闭窗口,vb.net,api,window,Vb.net,Api,Window,我正在搜索按标题关闭特定窗口的方法 我尝试了Process.getProcessByName;但这一案例并不特别有效 我正在用API或类似的工具搜索一个方法(不在C#中,我看到了一些代码,但在vb.net中无法正常工作) 谢谢 更新 谢谢你的回复。但是我仍然对你下面描述的解决方案有问题。 我只有一个进程可以控制两个窗口。然后,如果我关闭(或关闭)窗口#2,立即关闭第一个窗口(见图) 由于这个原因,我认为在使用API方法时,从乞讨开始 我只想关上第二扇窗户 您还没有向我们展示您的代码片段。也许你

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

我尝试了
Process.getProcessByName
;但这一案例并不特别有效

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

谢谢


更新

谢谢你的回复。但是我仍然对你下面描述的解决方案有问题。 我只有一个进程可以控制两个窗口。然后,如果我关闭(或关闭)窗口#2,立即关闭第一个窗口(见图)

由于这个原因,我认为在使用API方法时,从乞讨开始

我只想关上第二扇窗户


您还没有向我们展示您的代码片段。也许你可以试试这个

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

在上面的代码片段中,我在
列表框
上有一个窗口标题列表。该代码段将在列表框中迭代窗口标题,如果找到了标题,它将请求一条消息终止该过程或不终止该过程。

尝试使用类似的方法。使用来获取标题文本并关闭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

至于WinAPI函数,请尝试类似的方法。请注意,如果关闭父窗口,则也将关闭子窗口

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

谢谢你的回复,但在你的解决方案中仍然有问题。见我在第一页的评论post@MiBol因此,根据您的说法,我认为您的进程有多个窗口,您想关闭其中一个窗口,但不想关闭另一个窗口?没错,但如果我关闭窗口2(在图中),则会自动关闭窗口1。如果我手动执行,则不会发生这种情况。@MiBol哪个窗口是父窗口?@MiBol即使使用Windows Api,如果您发送关闭消息,如果您关闭父窗口,它也会关闭两个窗体。我将发布API函数,这样您就可以通过您的解决方案大量使用iThanks。但是,我仍然有问题,请参考第一篇文章了解更多信息。