Domanda

Ho bisogno di fare in modo che explorer.exe viene eseguito come una shell di sistema. Quello che devo fare è:

  • sovrascrivere shell corrente (Winlogon\Shell) con explorer.exe
  • Esegui explorer.exe (come shell)
  • Sovrascrivi shell corrente con il mio guscio.

Tra gli ultimi due passaggi è una gara:

  • Se io sovrascrivere lo shell corrente con il mio proprio guscio troppo in fretta, si apre solo la finestra "My Documents".

Quindi la domanda è, ci sono eventi / mutex / callback posso chiamare per assicurarsi che Explorer viene inizializzata come shell?

Il meglio sono riuscito a fare è attendere che la finestra cassetto come:

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

Il che sembra un pò sciatto, c'è un modo migliore?

È stato utile?

Soluzione

Non avrei nemmeno provare a fare questo. È necessario creare un nuovo desktop winsta0 (API Win32 CreateDesktop), avviare l'applicazione Kiosk su quel desktop e passare ad esso. In questo modo si lascia il desktop di default da solo, con Explorer, e può tornare ad essa se è necessario. Abbiamo avuto molto successo facendo questo in un progetto chiosco abbiamo costruito.

Altri suggerimenti

Un modo migliore (come in realtà documentato) potrebbe essere quella di creare una finestra di primo livello e attendere la trasmissione "TaskbarCreated". In questo modo si ottiene anche liberarsi della chiamata sonno ().

La trasmissione è documentata qui .

Non hai spiegato perché avete bisogno di 3 punti, "software chiosco" non è una spiegazione.

Hai provato semplicemente impostando il guscio in system.ini come LITESTEP e altri software desktop replacement? Se si deve passare avanti e indietro quindi prendere in considerazione uno switcher guscio, come shellon o LiteSpawn che sono stati scritti per questo compito.

Perché non si guarda i processi che sono in esecuzione? Prima del passaggio 1 explorer.exe non devono essere elencati in quanto non è la shell di default. Fase 2 si avvia e guardare per il processo, che un tempo a disposizione quindi si modifica.

Non sono sicuro se si è sul framework .NET o no, ma se siete gli eventi sulle classi StartInfo dovrebbe essere sufficiente per le vostre esigenze.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top