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

标签 c# .net vb.net rdp

我已经搜索了好几天了,但似乎找不到任何结果。 现在我们已经将一些工程师转移到 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

最佳答案

通过更多的挖掘和 friend 的帮助找到了解决方案,似乎在 IsIconic 函数上编码(marshal) 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

关于c# - 在 Windows 10 上检测 .NET (VB/C#) 中的进程最小化状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50853381/

相关文章:

c# - Unity 3D 在 GetButtonDown 上的特定时间移动对象

c# - 为什么我收到错误 Cannot await 'void' ?

vb.net - 扩展方法不是类的成员

c# - 将 Object.GetHashCode() 转换为 Guid

mysql - 不确定如何处理 NullReferenceException

VB.NET 将对象转换为 JSON

c# - 动态更改 web.config 中的 connectionString

c# - 当 Control.Visible == false 时无法将数据绑定(bind)到控件

c# - Asp.net MVC 2 缓存

c# - WCF 中的 MessageHeader 问题