【问题标题】:How to tell if Windows desktop is fully functional (loaded) c#如何判断 Windows 桌面是否功能齐全(已加载)c#
【发布时间】:2009-08-01 22:53:17
【问题描述】:

我正在编写一个在 Windows 登录时运行的应用程序,但我希望它等到桌面完全正常运行/加载后才真正开始执行任何操作。当 Windows 完全加载完桌面后,有什么方法可以解决吗?

【问题讨论】:

    标签: c# window desktop


    【解决方案1】:

    非常老的问题,但我需要同样的问题。以下代码似乎有效:

            [DllImport("user32.dll", SetLastError = true)]
            static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
            // wait until desktop ready
    
            IntPtr lHwnd = IntPtr.Zero;
            do
            {
                lHwnd = FindWindow("Shell_TrayWnd", null);
                Thread.Sleep(100);
            } while (lHwnd == IntPtr.Zero);
    

    【讨论】:

    • 这是钱。实际上,当桌面在准备用户环境时需要 5 分钟才能加载时,我的应用程序在首次登录时发生了崩溃。我也在访问系统托盘,所以这真的有助于让它“等待”直到该死的东西准备好。
    【解决方案2】:

    在 vista 上,您可以在自动(延迟)模式下使用服务,如果没有人以足够快的速度登录,这将在登录之前启动,但如果您希望避免在大部分系统准备好之前运行,这将起作用。如果您非常以用户为中心,希望等到他们准备就绪,那么您可能必须使用以用户为中心的触发器。

    有几个指标可以让您很好地了解用户是否认为会话已准备好使用:

    • 与系统帐户关联的进程的 CPU 负载不再占用大量 CPU 时间。
    • 用户已开始与 UI 交互(鼠标移动或键盘活动如此显着)
    • 网络连接已建立

    由于这些是启发式方法,因此您应该有一些基于时间的限制,以便在它们失火时尽可能地等待最短和最长。

    【讨论】:

    • 谢谢,这正是我所追求的。我在想性能计数器可能是一个开始寻找这个的地方。该系统是自动化的,因此不会有需要监控的用户交互,但必须有其他的东西可以很好地表明它已经完成了它的零碎工作。会得到挖掘。
    • Ataris22 - 我仍然想知道您希望达到的最终效果,例如您的应用程序会做什么以使其在启动过程中加载较晚(最后)?
    • @ShuggyCoUK 我面临着类似的情况,不同之处在于我想确保桌面在快速用户切换期间准备就绪(例如登录到 Windows 8.1,转到切换用户,然后切换回同一用户,桌面在一切安排好之前开始闪烁)。我怎么知道当时桌面上的所有内容都已完成加载?
    【解决方案3】:

    我假设您主要指的是基于 UI 的交互式应用程序,而不是系统服务。

    没有办法知道其他应用程序何时完成加载,因为“完成”的定义并不明确。但是,您可以使用第三方实用程序(例如 http://www.chameleon-managers.com/windows-startup-manager/startup-delayer.php)来控制应用程序的启动顺序。

    我很想知道您通过仅在其他桌面应用程序完成加载后才运行您的应用程序来达到什么效果。了解这一点可能有助于提出替代答案。

    问候

    【讨论】:

      【解决方案4】:

      在加载应用程序时,您是否不能进入计时器循环并通过监控进程列表等到所有必备进程都加载完毕。一旦满足条件,您就可以继续初始化您的应用程序。

      Process[] apps  =   Process.GetProcesses();
      

      【讨论】:

      • 你说得很好 - 如果你明确知道你在等待什么,你可以为此编写代码。
      【解决方案5】:

      只需将您的应用程序安装到startup folder。另请查看startup 上的维基百科页面。在启动文件夹read this 中安装 C# 应用程序。

      【讨论】:

      • 应用程序的启动不是问题。它确保在我真正开始在我的应用程序中进行任何工作之前加载并完成其他所有工作。我一直在考虑监控 cpu 活动,但这似乎不是一个很好的方法。
      • @Ataris22: 无法监控 CPU 活动,因为一些旧系统总是以大约 80%-100% 的使用率运行。最后一个链接解释了如何做你想做的事。
      • 再一次,这不是我苦苦挣扎的应用程序的开始。该应用程序已经在使用上述链接中提到的注册表项。问题是关于如何最好地判断 Windows 桌面处于完全正常运行的状态(而不是将其设置为在启动时运行将自行实现)
      • 请澄清您对“完全功能”的定义。您将使用什么标准来确定这一点?
      • 是的,这就是问题所在。我知道这是一个非常尴尬的问题。感谢大家的意见。
      猜你喜欢
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多