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

Traduções deste artigo Traduções deste artigo
ID do artigo: 140723 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sumário

Às vezes, os aplicativos precisam encerrar uma proteção de tela que já está em execução. No Microsoft Windows 95, uma proteção de tela pode ser finalizada facilmente pelo lançamento de uma mensagem WM_CLOSE para a janela proteção de tela ativa no momento como no exemplo:
PostMessage (GetActiveWindow(), WM_CLOSE, 0, L 0);
Microsoft Windows NT, no entanto, apresenta o conceito de áreas de trabalho separadas, para que aplicativos podem ser executados em um e proteções de tela podem ser executado em outro. Isso torna um pouco mais difícil terminação de proteção de tela no Windows NT, Windows 2000 e Windows Server 2003.

Mais Informações

O processo de obtenção de um identificador para a janela de proteção de tela ativa no momento é diferente para os sistemas operacionais posteriores ao Windows 95. No Windows NT, no Microsoft Windows 2000 e no Microsoft Windows Server 2003, a proteção de tela pode executados em desktop padrão ou em um desktop separado, dependendo de uma configuração nas propriedades de exibição:
  • Se você selecionar a caixa de seleção ao continuar, proteger com senha na guia Proteção de tela da caixa de diálogo Propriedades de vídeo , a proteção de tela será executado na sua própria área de trabalho.
  • Se você desmarcar a caixa de seleção descrita no ponto anterior, a proteção de tela é executada na área de trabalho padrão.
Não é possível usar a função GetForegroundWindow() ou FindWindow função para determinar se a proteção de tela está ativa no momento:
  • A função GetForegroundWindow() retorna NULL porque a proteção de tela está sendo executado em um desktop da área de trabalho que o aplicativo de chamada está sendo executado em diferente.
  • A função FindWindow ("WindowsScreenSaverClass", NULL) não funciona ou.
Portanto, a Microsoft recomenda o seguinte:
  • Código para ignorar a proteção de tela primeiro determina se a proteção de tela está sendo executado em sua própria área de trabalho.
  • Se a proteção de tela estiver sendo executado em sua própria área de trabalho, o código fecha a proteção de tela não existe.
  • Se não houver nenhuma área de trabalho para a proteção de tela, o código usa a área de trabalho padrão.


Para fazer isso, obter um identificador para área de trabalho a proteção de tela, enumerar janelas da área de trabalho e lançar um WM_CLOSE para a janela proteção de tela.

O código a seguir demonstra como fazer isso. Observe que se uma senha de proteção de tela estiver definida, o código a seguir exibe a caixa de diálogo senha, solicita ao usuário uma senha e em seguida, encerra o aplicativo de proteção de tela, na verdade,.
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); 
} 
Observação que encerrar uma proteção de tela que já está sendo executado como demonstrado acima é totalmente separado do desativar a proteção de tela, para que nenhuma proteção de tela seja iniciado depois que o designado período de tempo expira. Isso pode ser feito facilmente usando:
SystemParametersInfo( SPI_SETSCREENSAVEACTIVE,
                      FALSE,
                      0,
                      SPIF_SENDWININICHANGE
                     );				
esse método funciona bem para encerrar a proteção de tela em execução no momento. No entanto, um problema que você pode encontrar é que o sistema não será reiniciado a proteção de tela, a menos que o usuário move o mouse ou pressiona uma tecla. Se você precisar a proteção de tela para iniciar novamente, você precisará reinicializar o período de tempo limite. Fazer isso usando um dos seguintes métodos:
  • Chamando SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_SENDWININICHANGE).
  • Usando SetCursorPos() para simular a entrada do usuário.
Ambos os métodos fará com que o sistema a reiniciar o contador de tempo limite para a proteção de tela.

Propriedades

ID do artigo: 140723 - Última revisão: quinta-feira, 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 (32-bit x86)
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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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