Come sapere se il desktop di Windows è completamente funzionante (caricato) c #

StackOverflow https://stackoverflow.com/questions/1217694

  •  10-07-2019
  •  | 
  •  

Domanda

Sto scrivendo un'applicazione che funziona con l'accesso a Windows ma voglio che aspetti fino a quando il desktop è completamente funzionante / caricato prima che inizi effettivamente a fare qualsiasi cosa. Esiste un modo per allenarsi quando Windows ha completato completamente il caricamento del desktop?

È stato utile?

Soluzione

Su Vista potresti usare un servizio in modalità Automatica (Ritardata), questo si avvierebbe prima dell'accesso se nessuno avesse effettuato l'accesso abbastanza velocemente, ma se avessi voluto evitare di correre fino a quando gran parte del sistema non fosse stato pronto, funzionerebbe. Se sei fortemente incentrato sull'utente nel tuo desiderio di aspettare fino a quando non è pronto, probabilmente dovrai utilizzare i trigger incentrati sull'utente.

Esistono diverse metriche che ti darebbero una buona idea se l'utente ha considerato la sessione pronta per l'uso:

  • Il carico della CPU dei processi associati all'account di sistema non richiedeva più una percentuale significativa del tempo della CPU.
  • L'utente ha iniziato a interagire con l'interfaccia utente (così significativo movimento del mouse o attività della tastiera)
  • è stata stabilita la connettività di rete

Poiché si tratta di euristiche, è necessario disporre di alcuni vincoli basati sul tempo per l'attesa minima e massima possibile in caso di mancata accensione.

Altri suggerimenti

Domanda molto vecchia ma avevo bisogno della stessa cosa. Il seguente codice sembra funzionare:

        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        // wait until desktop ready

        IntPtr lHwnd = IntPtr.Zero;
        do
        {
            lHwnd = FindWindow("Shell_TrayWnd", null);
            Thread.Sleep(100);
        } while (lHwnd == IntPtr.Zero);

Suppongo che ti riferisci principalmente alle app interattive basate sull'interfaccia utente e non ai servizi di sistema.

Non c'è modo di sapere quando le altre applicazioni hanno terminato il caricamento, poiché la definizione di "quot" è terminata non è ben definito. Tuttavia, puoi controllare l'ordine di avvio delle applicazioni utilizzando un'utilità di terze parti come http://www.chameleon-managers.com/windows-startup-manager/startup-delayer.php .

Sono curioso di capire quale effetto stai cercando di ottenere facendo funzionare l'applicazione solo dopo che il caricamento delle altre applicazioni desktop è stato completato. Sapere questo potrebbe aiutare a suggerire risposte alternative.

Saluti

Nel caricamento dell'applicazione non è possibile entrare in un loop timer e attendere fino a quando tutti i processi prerequisiti vengono caricati monitorando l'elenco dei processi. Una volta soddisfatte le condizioni, è possibile continuare con l'inizializzazione della domanda.

Process[] apps  =   Process.GetProcesses();

Installa la tua applicazione nel cartella di avvio . Guarda anche la pagina di Wikipedia su startup . Per installare un'applicazione C # nella cartella di avvio leggi questo .

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