编辑:我改写了我的问题,请忽略下面的所有评论(截至 5 月 7 日)。
首先,我将尝试解释问题:
我的进程尝试使用 ITrayDeskBand::ShowDeskBand 以编程方式显示 Deskband。
除了操作系统正在加载其所有进程(重置或注销后)之外,它在任何时候都可以正常工作。
Windows 启动并开始加载各种应用程序\服务后,鼠标光标设置为等待几秒钟(取决于正在运行的应用程序数量\一切速度有多快)。
如果鼠标光标设置为等待,并且进程在此期间正在运行,则调用将失败。
但是,如果我的进程等待几秒钟(在那之后光标变得正常)然后调用调用,一切都会很好。
此行为在 Windows 7 和 Windows Vista 上重现。
所以基本上我要问的是:
1) 仅作为基础知识,当光标设置为繁忙时,操作系统会做什么?
2) 更重要的问题:我如何以编程方式检测此过程何时结束?
起初,我以为资源管理器没有正确加载,所以我使用了 WaitForInputIdle但事实并非如此。
后来我认为忙碌的游标表示 CPU 正忙,所以我使用 IDLE_PRIORITY_CLASS
创建了我的进程,但是在游标忙碌时收到了空闲时间。
最佳答案
Windows 永远不会停止加载应用程序和/或服务!
事实上,应用程序来来去去,其中一些是交互式的,而另一些则没有任何用户交互。甚至服务在不同的时间点加载(取决于它们的设置和外部条件——例如,智能卡资源管理器服务可能仅在操作系统检测到智能卡设备已连接时启动)。应用程序可以(但不能)自动停止,某些服务也是如此。
人们永远不知道 Windows 何时停止加载所有应用程序和/或服务。
关于windows - 如何以编程方式检测操作系统何时完成加载其所有应用程序\服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10361983/