Como forçar uma protecção de ecrã para fechar uma vez iniciado no Windows NT, Windows 2000 e Windows Server 2003

Traduções de Artigos Traduções de Artigos
Artigo: 140723 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sumário

Por vezes aplicações tem de terminar uma protecção de ecrã que já está em execução. No Microsoft Windows 95, uma protecção de ecrã pode ser terminada facilmente registando uma mensagem WM_CLOSE para a janela protecção de ecrã actualmente activa como no seguinte exemplo:
PostMessage (GetActiveWindow(), WM_CLOSE, 0, 0 L);
Microsoft Windows NT, no entanto, introduz o conceito de diferentes ambientes de trabalho, para que aplicações podem executado em um, e protecções de ecrã podem ser executado em outro. Deste modo, terminação de protecção de ecrã no Windows NT, Windows 2000 e Windows Server 2003 um pouco mais difícil.

Mais Informação

O processo de obter um identificador para a janela de protecção de ecrã actualmente activa é diferente para sistemas operativos que são posteriores ao Microsoft Windows 95. No Windows NT, no Microsoft Windows 2000 e no Microsoft Windows Server 2003, a protecção de ecrã pode executar no ou o ambiente de predefinição trabalho ou no ambiente de trabalho diferente, consoante uma definição nas propriedades de visualização:
  • Se seleccionar a caixa de verificação ao retomar, proteger por palavra-passe no separador Protecção de ecrã da caixa de diálogo Propriedades de visualização , a protecção de ecrã é executado no seu próprio ambiente de trabalho.
  • Se desmarcar a caixa de verificação que é descrita ponto anterior, a protecção de ecrã é executado no ambiente de trabalho predefinido.
Não pode utilizar a função GetForegroundWindow() ou FindWindow função para determinar se a protecção de ecrã está actualmente activa:
  • A função GetForegroundWindow() devolve NULL porque a protecção de ecrã está em execução no ambiente de trabalho diferente do que a aplicação chamada está em execução ambiente de trabalho.
  • A função FindWindow ("WindowsScreenSaverClass", NULL) não funciona em.
Assim, a Microsoft recomenda o seguinte:
  • Código para desactivar a protecção de ecrã primeiro determina se a protecção de ecrã está em execução no seu próprio ambiente de trabalho.
  • Se a protecção de ecrã estiver em execução no ambiente de trabalho próprio, o código fecha a protecção de ecrã existe.
  • Se não existir nenhum ambiente de trabalho para a protecção de ecrã, o código utiliza o ambiente de trabalho predefinido.


Para tal, obter um identificador para o ambiente de trabalho a protecção de ecrã, enumerar janelas do ambiente de trabalho e, em seguida, colocar um WM_CLOSE a janela de protecção de ecrã.

O seguinte código demonstra como efectuar este procedimento. Nota que se uma palavra-passe de protecção de ecrã estiver definida, o seguinte código apresenta a caixa de diálogo palavra-passe, pede ao utilizador uma palavra-passe e, em seguida, termina, na realidade, a aplicação de protecção de ecrã.
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); 
} 
nota que está totalmente separado de desactivar a protecção de ecrã completamente, terminar uma protecção de ecrã já está em execução como demonstrado acima para que nenhuma protecção de ecrã iniciado depois do designado período de tempo expira. Possível fazê-lo facilmente utilizando:
SystemParametersInfo( SPI_SETSCREENSAVEACTIVE,
                      FALSE,
                      0,
                      SPIF_SENDWININICHANGE
                     );				
este método funciona bem para terminar a protecção de ecrã actualmente em execução. No entanto, um problema que poderá encontrar é que o sistema não irá reiniciar a protecção de ecrã a menos que o utilizador move o rato ou premir uma tecla. Se necessitar da protecção de ecrã para iniciar novamente, terá de reinicializar o período de tempo limite. Fazê-lo utilizando um dos seguintes métodos:
  • Chamar SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, VERDADEIRO, 0, SPIF_SENDWININICHANGE).
  • Utilizar SetCursorPos() para simular a intervenção do utilizador.
Ambos os métodos irão fazer com que o sistema reiniciar o contador de limite de tempo para a protecção de ecrã.

Propriedades

Artigo: 140723 - Última revisão: 22 de fevereiro de 2007 - Revisão: 3.2
A informação contida neste artigo aplica-se a:
  • Microsoft Win32 Software Development Kit (SDK) 3.1 nas seguintes plataformas
    • 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
Palavras-chave: 
kbmt kbcode kbhowto kbscreensaver KB140723 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 140723

Submeter comentários

 

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