如何判断Windows桌面是否功能齐全(已加载)c#

时间:2009-08-01 22:53:18

标签: c# window desktop

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

5 个答案:

答案 0 :(得分:5)

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

        [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);

答案 1 :(得分:4)

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

存在多个指标可以让您更好地了解用户是否认为会话已准备就绪:

  • 与系统帐户关联的进程的CPU负载不再占用CPU时间的很大一部分。
  • 用户已开始与用户界面进行交互(如此重要的鼠标移动或键盘活动)
  • 建立网络连接

由于这些是启发式方法,因此如果它们失火,您应该对最小和最大可能的等待有一些基于时间的约束。

答案 2 :(得分:2)

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

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

我很想知道您的应用程序只有在其他桌面应用程序完成加载后运行才能实现的效果。了解这可能有助于提出其他答案。

此致

答案 3 :(得分:1)

在应用程序的加载中,您无法进入计时器循环并等待,直到监视进程列表加载所有先决条件进程。一旦满足条件,您就可以继续初始化您的申请。

Process[] apps  =   Process.GetProcesses();

答案 4 :(得分:0)

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