Pergunta

Temos uma noite processo de atualizações de aplicativos em um pc, e que exige levar o aplicativo para baixo e novamente para cima (não está olhando para começar a mudar esse processo).

O problema é que estamos a construir uma barra de aplicativos do Windows no lançamento que exige um ecrã válido, e quando o sistema é bloqueado, não existe um na Tela de classe.Assim, nenhum dos efeitos visuais estão habilitados e mostra-se real feio.

A única maneira que temos atualmente em torno desta é a de detectar uma tela bloqueada e só volta e aguarde até que o utilizador desbloqueia a área de trabalho e, em seguida, continuar a iniciar.Deixando-a para baixo não é uma opção, como esta é uma parte fundamental de nossa usuário do fluxo de trabalho, e eles esperam que a execução se eles deixaram de que maneira a noite antes.

Qualquer idéias??Eu não consigo encontrar as informações de exibição, em qualquer lugar, mas tem que ser armazenada em algum lugar, desde que o usuário ainda está conectado.

O conteúdo da Tela.AllScreens matriz:

** Bloqueado:

Device Name    : DISPLAY
Primary        : True
Bits Per Pixel : 0
Bounds         : {X=-1280,Y=0,Width=2560,Height=1024}
Working Area   : {X=0,Y=0,Width=1280,Height=1024}

** Quando Desbloqueado:

Device Name    : \\.\DISPLAY1
Primary        : True
Bits Per Pixel : 32
Bounds         : {X=0,Y=0,Width=1280,Height=1024}
Working Area   : {X=0,Y=0,Width=1280,Height=994}

Device Name    : \\.\DISPLAY2
Primary        : False
Bits Per Pixel : 32
Bounds         : {X=-1280,Y=0,Width=1280,Height=1024}
Working Area   : {X=-1280,Y=0,Width=1280,Height=964}
Foi útil?

Solução

Não há solução limpa para isso, o Windows não fornece uma maneira de detectar que a estação de trabalho está bloqueada e que a área de trabalho "errada" está ativa. Você só pode detectar o comutador de sessão, código de amostra é aqui. Para fazer isso funcionar, você é praticamente forçado a incluir esse código no aplicativo e deixar uma migra de pão que ela poderia ler quando começar de volta. Certifique -se de redefini -lo depois de usá -lo uma vez para que o aplicativo não possa ficar preso permanentemente.

Outras dicas

Esta tela de bloqueio do problema depende de qual versão você está utilizando, XP que usa GINA que bloqueia a tela e Vista, que usa ContentProvider, ambos os mecanismos são responsáveis por isso.

A única maneira de ver se o ecrã estiver bloqueado, é um protetor de tela nos chutes, (isso pode ser facilmente consultados pela execução de uma pinvoke para consulta SystemsParameterInfo, para saber se a proteção de tela está ativa ou não - SPI_GETSCREENSAVERRUNNING e SPI_GETSCREENSAVESECURE para determinar se que disparam a GINA ou o Provedor de Conteúdo) ao pressionar WinKey + L para soco no protetor de tela, após o período de tempo especificado, se nenhuma atividade, em seguida, GINA ou ContentProvider chutes e substitui a protecção de ecrã com uma tela de bloqueio...Eu ter incluído dois links relevantes que foi postado aqui sobre o seguro de informações de registo no Windows...

Isso exigiria um pouco de trabalho, no entanto, você poderia utilizar enumdisplayDevices, enumdisplaySettingSex, MonitorFroMpoint, getMonitorInfo tudo do User32 e pegar uma foto do dispositivo.

Se o PC estiver bloqueado, ou se houver um economizador de tela ativo, a captura de tela será sempre uma cor bege. Você pode verificar essa condição para saber que o sistema está bloqueado. Isso funciona em sistemas que estão sendo divulgados também (Thin Client para XP VDI, por exemplo.)

Pelo menos isso funciona no meu ambiente. As amostras de código podem ser encontradas no Google.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top