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



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

我已经为初始问题制定了解决方案,但这已经让位于一个新的问题。

我需要了解 RDP 窗口是否处于最小化状态,以便我可以在应用程序的计时器刻度上标记它。

我尝试使用所选进程的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 函数上封送布尔值就可以了。

<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

最新更新