Come forzare uno screen saver per chiudere una volta avviato in Windows NT, Windows 2000 e Windows Server 2003

Traduzione articoli Traduzione articoli
Identificativo articolo: 140723 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sommario

Talvolta le applicazioni devono terminare uno screen saver che č giā in esecuzione. In Microsoft Windows 95, uno screen saver potrebbe essere terminato facilmente registrando un messaggio WM_CLOSE alla finestra di screen saver attivo sullo schermo come in questo esempio:
PostMessage (GetActiveWindow(), WM_CLOSE, 0, 0 L);
Microsoft Windows NT, vengono tuttavia, introduce il concetto di desktop separato, in modo che le applicazioni possono eseguire su uno e gli screen saver possono essere eseguiti su un altro. In questo modo un po' pių difficile screen saver terminazione in Windows NT, Windows 2000 e Windows Server 2003.

Informazioni

Il processo di ottenere un handle per la finestra di screen saver attivo sullo schermo č diverso per i sistemi operativi successivi a Windows 95. In Windows NT, in Microsoft Windows 2000 e in Microsoft Windows Server 2003, lo screen saver puō eseguire su desktop predefinito o su un desktop separato, in base a un'impostazione nelle proprietā di visualizzazione:
  • Se si seleziona la casella di controllo al ripristino, Proteggi con password nella scheda Screen Saver della finestra di dialogo Proprietā-schermo , viene eseguito lo screen saver sul proprio desktop.
  • Se si deseleziona la casella di controllo descritta nel punto precedente, lo screen saver verrā eseguito sul desktop predefinito.
Non č possibile utilizzare la funzione GetForegroundWindow() o il FindWindow funzione per determinare se lo screen saver č attivo:
  • La funzione GetForegroundWindow() restituisce NULL perché lo screen saver č in esecuzione su un diverso desktop dal desktop in cui l'applicazione chiamante č in esecuzione.
  • La funzione FindWindow ("WindowsScreenSaverClass", NULL) non funziona uno.
Si consiglia pertanto di seguito:
  • Codice per chiudere lo screen saver viene innanzitutto determina se lo screen saver č in esecuzione sul proprio desktop.
  • Se lo screen saver č in esecuzione sul proprio desktop, il codice chiude lo screen saver disponibili.
  • Se č presente alcun desktop dello screen saver, il codice utilizza il desktop predefinito.


A tal fine, ottenere un handle per desktop dello screen saver, enumerare finestre del desktop e quindi registrare un WM_CLOSE alla finestra saver dello schermo.

Il codice riportato di seguito viene illustrato come eseguire questa operazione. Si noti che se č impostata una password allo screen saver, il codice riportato di seguito viene visualizzata la finestra di dialogo password, richiede all'utente una password e quindi interrompe effettivamente l'applicazione screen saver.
BOOL CALLBACK KillScreenSaverFunc(HWND hwnd, LPARAM lParam) 
{ 
	if(IsWindowVisible(hwnd)) 
		PostMessage(hwnd, WM_CLOSE, 0, 0); 
	return TRUE; 
} 
HDESK hdesk; 
hdesk = OpenDesktop(TEXT("Screen-saver"), 0, FALSE, DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS); 
if (hdesk) 
{ 
	EnumDesktopWindows(hdesk, KillScreenSaverFunc, 0);
	CloseDesktop(hdesk); } 
else 
{ 
	// Windows 2000 and later: 
	// If there is no screen saver desktop, the screen saver 
	// is on the default desktop. Close it by sending a 
	// WM_CLOSE. PostMessage(GetForegroundWindow(), WM_CLOSE, 0, 0L); 
} 
si noti che č completamente separato dal disattivazione dello screen saver, terminare uno screen saver che č giā in esecuzione come illustrato sopra in modo che Nessuno screen saver viene avviato dopo il designato periodo di tempo. Questa operazione puō essere eseguita facilmente utilizzando:
SystemParametersInfo( SPI_SETSCREENSAVEACTIVE,
                      FALSE,
                      0,
                      SPIF_SENDWININICHANGE
                     );				
questo metodo č ideale per terminare lo screen saver attualmente in esecuzione. Tuttavia, č possibile che si verifichi un problema č che il sistema non verrā riavviato lo screen saver a meno che l'utente sposta il mouse o preme un tasto. Se č necessario avviare di nuovo lo screen saver, sarā necessario reinizializzare il periodo di timeout. Per eseguire questa operazione, utilizzando uno dei metodi descritti di seguito:
  • Chiamata SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_SENDWININICHANGE).
  • Utilizzo SetCursorPos() per simulare l'input dell'utente.
Entrambi questi metodi verranno costringere il sistema riavviare il contatore di timeout dello screen saver.

Proprietā

Identificativo articolo: 140723 - Ultima modifica: giovedė 22 febbraio 2007 - Revisione: 3.2
Le informazioni in questo articolo si applicano a:
  • Microsoft Win32 Software Development Kit (SDK) 3.1 alle seguenti piattaforme
    • Microsoft Windows NT Advanced Server 3.1
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
Chiavi: 
kbmt kbcode kbhowto kbscreensaver KB140723 KbMtit
Traduzione automatica articoli
Il presente articolo č stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non č sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pių o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non č la sua. Microsoft non č responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 140723
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com