【问题标题】:How to minimize and restore process with lots of instances?如何最小化和恢复大量实例的过程?
【发布时间】:2016-01-26 08:15:34
【问题描述】:

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

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

可能出了什么问题?或者,也许有人可以分享您的代码,了解如何通过大量实例最小化和恢复流程。我希望有人可以帮助我。

【问题讨论】:

  • 您能否提供更多有关问题所在的详细信息?您是否可以发布可以自行编译的工作代码?这将有助于我们进行诊断。
  • 你好@kdbanman,这段代码正在运行并且它的编译没有错误。问题是,每当我点击该按钮时,有时某些实例不会最小化,有时也不会恢复。

标签: vb.net instance restore minimize


【解决方案1】:

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

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

【讨论】:

  • 感谢优化,但我不太确定这些程序可能在哪里。只是为了一个想法,我使用了您的代码,之前我在此代码上使用了该代码以及持有这些服务器的代码。 experts-exchange.com/questions/28736752/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多