Question

Je dois vous assurer que explorer.exe fonctionne comme un shell système. Ce que je dois faire est:

  • Ecraser l'enveloppe de courant (Winlogon\Shell) avec explorer.exe
  • Exécuter explorer.exe (comme shell)
  • Ecraser le shell courant avec mon propre shell.

Entre les deux dernières étapes est une course:

  • Si j'écrasent la coquille en cours avec mon propre shell trop vite, seule fenêtre « Mes documents » ouvre.

La question est, ce qu'il ya des événements / mutex / callbacks Je peux appeler pour vous assurer que l'explorateur est initialisé comme shell?

Le meilleur que je réussi à faire est d'attendre la fenêtre du plateau comme:

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

Ce qui semble un peu bâclée, est-il une meilleure façon?

Était-ce utile?

La solution

Je même pas essayer de le faire. Vous devez créer un nouveau, démarrez votre application Kiosque bureau winsta0 (Win32 API CreateDesktop) sur ce bureau et basculer vers elle. De cette façon, vous laisser seul le bureau par défaut, l'explorateur en cours d'exécution, et peut y revenir si vous avez besoin. Nous avons eu beaucoup de succès le faire dans un projet de kiosque, nous avons construit.

Autres conseils

Une meilleure façon (comme dans effectivement documenté) serait de créer une fenêtre de niveau supérieur et d'attendre l'émission « TaskbarCreated ». De cette façon, vous aussi se débarrasser de l'appel Sleep ().

La diffusion est documentée ici .

Vous avez pas expliqué pourquoi vous avez besoin de 3 étapes, « logiciel de kiosque » n'est pas une explication.

Avez-vous essayé de placer simplement le shell dans system.ini comme litestep et d'autres logiciels de remplacement de bureau? Si vous devez revenir en arrière puis envisager un commutateur shell comme Shellon ou LiteSpawn qui ont été écrites pour cette tâche.

Pourquoi ne pas regarder les processus en cours d'exécution qui sont? Avant l'étape 1 explorer.exe ne doit pas être répertorié comme il est le shell par défaut. Étape 2 vous commencez et regarder le processus, que vous changez d'une fois disponible.

Je ne sais pas si vous êtes sur le framework .NET ou non, mais si vous êtes les événements sur les classes StartInfo devrait être suffisant pour vos besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top