代码之家  ›  专栏  ›  技术社区  ›  arul

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

  •  0
  • arul  · 技术社区  · 16 年前

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

    • 覆盖当前外壳( Winlogon\Shell 资源管理器
    • 资源管理器 (如壳牌)
    • 用我自己的shell覆盖当前shell。

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

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

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

    我能做的最好的事情就是等待托盘窗口,比如:

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

    这看起来有点马虎,有更好的方法吗?

    4 回复  |  直到 10 年前
        1
  •  6
  •   ScottTx    16 年前

    我甚至不想这么做。您应该创建一个新的winsta0桌面(win32 api create desktop),在该桌面上启动kiosk应用程序并切换到它。这样,您就可以单独使用默认桌面,运行资源管理器,并在需要时返回到它。我们在自己建造的一个亭子项目中取得了很大的成功。

        2
  •  3
  •   ilmcuts    15 年前

    更好的方法(如实际文档中所述)是创建一个顶级窗口,并等待“taskbarcreated”广播。这样您还可以摆脱sleep()调用。

    广播记录在案 here .

        3
  •  0
  •   SpliFF    16 年前

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

    您是否尝试过简单地在System.ini中设置shell,比如LiteStep和其他桌面替换软件?如果你必须来回切换,那么考虑一个壳式交换机 ShellOn LiteSpawn 是为这个任务写的。

        4
  •  -1
  •   Robert MacLean    16 年前

    为什么不观察正在运行的进程? 在步骤1之前,不应列出explorer.exe,因为它不是默认shell。 第二步,你启动它并观察这个过程,一旦这个过程可用,你就会改变。

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