Al momento sei offline in attesa che la connessione Internet venga ristabilita

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

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
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.
disattivare stop disattivare esecuzione disattivare lo screen saver

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 140723 - Ultima revisione: 02/22/2007 04:02:17 - Revisione: 3.2

Microsoft Win32 Software Development Kit (SDK) 3.1

  • kbmt kbcode kbhowto kbscreensaver KB140723 KbMtit
Feedback