确定explorer.exe是否作为Windows shell运行?

aru*_*rul 0 c winapi windows-explorer windows-shell

我需要确保explorer.exe作为系统shell运行.我需要做的是:

  • 用.覆盖当前的shell(Winlogon\Shell)explorer.exe
  • 运行explorer.exe(作为shell)
  • 用我自己的shell覆盖当前的shell.

在最后两个步骤之间是一场比赛:

  • 如果我用自己的shell覆盖当前shell太快,只打开"我的文档"窗口.

所以问题是,是否有任何事件/互斥/回调我可以调用以确保资源管理器初始化为shell?

我设法做的最好是等待托盘窗口,如:

while(!FindWindow("Shell_TrayWnd", NULL)) { 
     sleep(250);
}
Run Code Online (Sandbox Code Playgroud)

这似乎有点草率,有更好的方法吗?

Sco*_*tTx 6

我甚至都不会尝试这样做.您应该创建一个新的winsta0桌面(Win32 API CreateDesktop),在该桌面上启动Kiosk应用程序并切换到它.这样您就可以单独保留默认桌面,运行资源管理器,如果需要,可以返回它.在我们建立的自助服务终端项目中,我们取得了很大的成功.