如何使用大量实例最小化和恢复进程?

时间:2015-10-27 02:50:20

标签: 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
    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

可能有什么不对?或者也许有人可以分享您的代码,了解如何最大限度地减少和恢复大量实例的过程。我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:2)

真的不确定问题出在哪里,但您可以使用以下内容显着减少代码:

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