Определение, работает ли explorer.exe как оболочка Windows? - PullRequest
0 голосов
/ 25 мая 2009

Мне нужно убедиться, что explorer.exe работает как системная оболочка. Что мне нужно сделать, это:

  • Перезаписать текущую оболочку (Winlogon\Shell) с помощью explorer.exe
  • Выполнить explorer.exe (как оболочка)
  • Перезаписать текущую оболочку моей собственной оболочкой.

Между двумя последними шагами проходит гонка:

  • Если я слишком быстро перезаписываю текущую оболочку своей собственной оболочкой, открывается только окно «Мои документы».

Итак, вопрос в том, есть ли какие-либо события / мьютексы / обратные вызовы, которые я могу вызвать, чтобы убедиться, что проводник инициализирован как shell?

Лучшее, что мне удалось сделать, - это дождаться появления окна в трее:

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

Что кажется неаккуратным, есть ли лучший способ?

Ответы [ 4 ]

6 голосов
/ 03 июня 2009

Я бы даже не попытался это сделать. Вам следует создать новый рабочий стол winsta0 (Win32 API CreateDesktop), запустить приложение Kiosk на этом рабочем столе и переключиться на него. Таким образом, вы оставляете рабочий стол по умолчанию в одиночку, запускаете проводник и можете вернуться к нему, если вам нужно. Мы добились большого успеха в этом проекте, который мы построили.

3 голосов
/ 31 июля 2009

Лучшим способом (как на самом деле задокументировано) было бы создание окна верхнего уровня и ожидание трансляции «TaskbarCreated». Таким образом, вы также избавляетесь от вызова Sleep ().

Трансляция задокументирована здесь .

0 голосов
/ 07 июня 2009

Вы не объяснили, почему вам нужно 3 шага, «программное обеспечение для киоска» не является объяснением.

Вы пробовали просто установить оболочку в system.ini, как litestep и другое программное обеспечение для замены рабочего стола? Если вам нужно переключаться назад и вперед, рассмотрите переключатель оболочки, например ShellOn или LiteSpawn , которые были написаны для этой задачи.

0 голосов
/ 03 июня 2009

Почему вы не наблюдаете за запущенными процессами? До шага 1 файл explorer.exe не должен быть указан, поскольку он не является оболочкой по умолчанию. Шаг 2 вы запускаете его и наблюдаете за процессом, который когда-то станет доступен, а затем измените.

Я не уверен, находитесь ли вы на платформе .NET или нет, но если вам нужны события в классах StartInfo, этого должно быть достаточно для ваших нужд.

...