2009-05-25 2 views
0

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

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

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

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

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

Лучшее, что я смог сделать, это ждать окна лотка, как:

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

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

+0

То, что я делаю. Он находится в разделе реестра Winlogon \ Shell. – arul

+1

Зачем использовать explorer.exe как оболочку, а затем заменить ее позже? –

+0

Программное обеспечение для киоска. – arul

ответ

6

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

+0

Я боюсь, что это тоже не сработает, в какой-то момент мне нужно, чтобы приложение оставалось доступным даже после запуска проводника. – arul

+0

Создайте в своем приложении функцию abiltiy для переключения между рабочими столами с помощью SwitchDesktop. – ScottTx

+0

Я имею в виду, что мне нужно отобразить окно состояния моего приложения в «главном окне». – arul

-1

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

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

+0

Это не сработает. Процесс указан, как только он будет создан. Время между созданием процесса и созданием проводника довольно длительное (не говоря уже о совершенно случайном). – arul

0

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

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

+0

System.ini не работает, это старый способ от W95 раз. Я также не нуждаюсь в стороннем решении, тот, который я опубликовал в оригинальной публикации, отлично работает, я просто подумал, что может быть лучший способ ... – arul

3

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

Передача документально подтверждена here.

Смежные вопросы