在 Windows 10 上检测 .NET 中的进程最小化状态 (VB/C#)

Detecting Process Minimised State in .NET (VB/C#) on Windows 10

我已经为此搜索了好几天,但似乎无处可寻。 现在出现了一个问题,因为我们已经将一些工程师转移到 Windows10。我们的一个应用程序允许为选定的服务器启动 RDP windows。现在看来,当最小化 RDP window 时,WinForms 中不会引发任何事件,这会导致表单被隐藏且从未取消隐藏的问题。

我已经为最初的问题找到了解决方案,但这个问题已经让位给了新的问题。

我需要查明 RDP window 是否处于最小化状态,以便我可以在应用程序的计时器滴答上标记它。

我已尝试使用所选进程的 MainWindowHandle 并尝试实施 IsIconic,但这似乎不再适用于 Windows10 进程。

任何帮助将不胜感激,因为我正在拔头发。

下面是我使用代码的方向,我完全偏离了吗?

    Private Sub CheckMinimisedTimer_Tick(sender As Object, e As EventArgs) Handles CheckMinimisedTimer.Tick
    Dim p As Process = Process.GetProcesses().Where(Function(x) x.MainWindowTitle = $"{Me.Text} RDP CLIENT").FirstOrDefault()
    If p IsNot Nothing Then
        Dim i As Boolean = p.MainWindowHandle
        If Not i Then
            Me.WindowState = FormWindowState.Minimized
        End If
    End If
End Sub

通过更多的挖掘和朋友的帮助找到了解决方案,似乎在 IsIconic 函数上封送 Bool 就成功了。

    <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
Public Shared Function IsIconic(ByVal hWnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

Private Sub CheckMinimisedTimer_Tick(sender As Object, e As EventArgs) Handles CheckMinimisedTimer.Tick
    Dim p As Process = Process.GetProcesses().Where(Function(x) x.MainWindowTitle = $"{Me.Text} RDP CLIENT").FirstOrDefault()
    If p IsNot Nothing Then
        Dim i As IntPtr = p.MainWindowHandle
        If IsIconic(i) Then
            Me.WindowState = FormWindowState.Minimized
        End If
    End If
End Sub