0

我需要确保它explorer.exe作为系统外壳运行。我需要做的是:

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

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

  • 如果我用自己的 shell 过快地覆盖当前 shell,则只会打开“我的文档”窗口。

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

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

while(!FindWindow("Shell_TrayWnd", NULL)) { 
     sleep(250);
}

看起来有点草率,有没有更好的方法?

4

4 回答 4

6

我什至不会尝试这样做。您应该创建一个新的 winsta0 桌面 (Win32 API CreateDesktop),在该桌面上启动您的 Kiosk 应用程序并切换到它。这样,您就可以保留默认桌面,运行资源管理器,并且可以在需要时返回它。我们在我们建立的信息亭项目中取得了很大的成功。

于 2009-06-03T19:58:57.180 回答
3

更好的方法(如实际记录的那样)是创建一个顶级窗口并等待“TaskbarCreated”广播。这样你也摆脱了 Sleep() 调用。

广播记录在这里

于 2009-07-30T23:47:57.273 回答
0

您还没有解释为什么需要 3 个步骤,“kiosk 软件”不是解释。

您是否尝试过像 litestep 和其他桌面替换软件一样在 system.ini 中简单地设置 shell?如果您必须来回切换,请考虑使用ShellOnLiteSpawn 之类的 shell 切换器,它们是为此任务编写的。

于 2009-06-07T18:37:15.383 回答
-1

你为什么不看正在运行的进程?不应列出在第 1 步之前的 explorer.exe,因为它不是默认 shell。第 2 步,您启动它并观察该过程,一旦可用,您就可以更改它。

我不确定您是否在 .NET 框架上,但如果您是 StartInfo 类上的事件应该足以满足您的需求。

于 2009-06-02T21:07:55.563 回答