Vb.net 如何使用大量实例最小化和恢复过程?

Vb.net 如何使用大量实例最小化和恢复过程?,vb.net,instance,restore,minimize,Vb.net,Instance,Restore,Minimize,我这里有一个代码,但在点击按钮时,一些实例并没有真正最小化或恢复。我尽了我所能,但运气不好 Private Declare Function ShowWindow Lib "user32.dll" ( _ ByVal hWnd As IntPtr, _ ByVal nCmdShow As Show_Window _ ) As Boolean Private Enum Show_Window As Integer Hide = 0 ShowNormal = 1 ShowM

我这里有一个代码,但在点击按钮时,一些实例并没有真正最小化或恢复。我尽了我所能,但运气不好

Private Declare Function ShowWindow Lib "user32.dll" ( _
ByVal hWnd As IntPtr, _
ByVal nCmdShow As Show_Window _
) As Boolean

Private Enum Show_Window As Integer
    Hide = 0
    ShowNormal = 1
    ShowMinimized = 2
    ShowMaximized = 3
    Maximize = 3
    ShowNormalNoActivate = 4
    Show = 5
    Minimize = 6
    ShowMinNoActivate = 7
    ShowNoActivate = 8
    Restore = 9
    ShowDefault = 10
    ForceMinimized = 11
End Enum

Private Sub MinimizeAllToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MinimizeAllToolStripMenuItem.Click
    Dim p() As Process = Process.GetProcessesByName("GameServer")
    Dim p1() As Process = Process.GetProcessesByName("AccountServer")
    Dim p2() As Process = Process.GetProcessesByName("GateServer")
    Dim p3() As Process = Process.GetProcessesByName("GroupServer")
    Dim p4() As Process = Process.GetProcessesByName("TradeServer")
    Dim p5() As Process = Process.GetProcessesByName("FilterServer")
    If MinimizeAllToolStripMenuItem.Text = "Minimize All" Then
        For Each pr As Process In p
            ShowWindow(pr.MainWindowHandle, Show_Window.ForceMinimized)
        Next pr
        For Each pr As Process In p1
            ShowWindow(pr.MainWindowHandle, Show_Window.ForceMinimized)
        Next pr
        For Each pr As Process In p2
            ShowWindow(pr.MainWindowHandle, Show_Window.ForceMinimized)
        Next pr
        For Each pr As Process In p3
            ShowWindow(pr.MainWindowHandle, Show_Window.ForceMinimized)
        Next pr
        For Each pr As Process In p4
            ShowWindow(pr.MainWindowHandle, Show_Window.ForceMinimized)
        Next pr
        For Each pr As Process In p5
            ShowWindow(pr.MainWindowHandle, Show_Window.ForceMinimized)
        Next pr
        MinimizeAllToolStripMenuItem.Text = "Restore All"
    Else
        For Each pr As Process In p
            ShowWindow(pr.MainWindowHandle, Show_Window.Restore)
        Next pr
        For Each pr As Process In p1
            ShowWindow(pr.MainWindowHandle, Show_Window.Restore)
        Next pr
        For Each pr As Process In p2
            ShowWindow(pr.MainWindowHandle, Show_Window.Restore)
        Next pr
        For Each pr As Process In p3
            ShowWindow(pr.MainWindowHandle, Show_Window.Restore)
        Next pr
        For Each pr As Process In p4
            ShowWindow(pr.MainWindowHandle, Show_Window.Restore)
        Next pr
        For Each pr As Process In p5
            ShowWindow(pr.MainWindowHandle, Show_Window.Restore)
        Next pr
        MinimizeAllToolStripMenuItem.Text = "Minimize All"
    End If
End Sub

有什么不对劲吗?或者,也许有人可以分享您的代码,告诉您如何最小化和恢复具有大量实例的过程。我希望有人能帮助我。

我真的不确定问题出在哪里,但您可以使用以下方法大幅减少代码:

Private Declare Function ShowWindow Lib "user32.dll" (
    ByVal hWnd As IntPtr,
    ByVal nCmdShow As Show_Window
    ) As Boolean

Private Enum Show_Window As Integer
    Hide = 0
    ShowNormal = 1
    ShowMinimized = 2
    ShowMaximized = 3
    Maximize = 3
    ShowNormalNoActivate = 4
    Show = 5
    Minimize = 6
    ShowMinNoActivate = 7
    ShowNoActivate = 8
    Restore = 9
    ShowDefault = 10
    ForceMinimized = 11
End Enum

Private Sub MinimizeAllToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MinimizeAllToolStripMenuItem.Click
    Dim processes() As String = {"GameServer", "AccountServer", "GateServer", "GroupServer", "TradeServer", "FilterServer"}
    Dim cmd As Show_Window = If(MinimizeAllToolStripMenuItem.Text = "Minimize All", Show_Window.Minimize, Show_Window.Restore)
    For Each processName As String In processes
        For Each pr As Process In Process.GetProcessesByName(processName)
            ShowWindow(pr.MainWindowHandle, cmd)
        Next
    Next
    MinimizeAllToolStripMenuItem.Text = If(MinimizeAllToolStripMenuItem.Text = "Restore All", "Minimize All", "Restore All")
End Sub

你能提供一些关于问题的更多细节吗?您是否可以发布可以自行编译的工作代码?这将帮助我们进行诊断。您好@kdbanman,这段代码正在运行,编译过程中没有错误。问题是,每当我按下那个按钮,有时一些实例不去最小化,有时不去恢复。谢谢你的优化,但我不太确定程序可能在哪里。只是为了一个想法,我使用了你的代码,之前我也在这段代码中使用过,这段代码保存着那些服务器。