2009-10-19 60 views
5

Escribo mi primera aplicación C#, que es un programador. Una vez por hora, quiero abrir un cuadro de diálogo emergente y bloquear la pantalla durante dos minutos para tomar un descanso.¿Cómo puedo bloquear la pantalla usando C#?

Por el momento, mi aplicación solo muestra un formulario en "TopMost" cuando es hora de romperlo y lo oculta dos minutos más tarde.

¿Cómo puedo bloquear la pantalla también? Algo similar al estilo UAC en Vista.

Respuesta

5

Como alternativa a tomar una captura de pantalla (que también he utilizado como enfoque en el pasado en circunstancias ligeramente diferentes) también puede hacerlo creando una nueva ventana (WinForm) que sea pantalla completa y encima de todas las otras ventanas.

Si configura el color de fondo de la ventana como negro continuo, establezca la opacidad en 70-80%, obtendrá algo que se asemeja al aviso de UAC en Vista.

p. Ej.

formName.WindowState = FormWindowState.Maximized; 
formName.FormBorderStyle = FormBorderStyle.None; 
formName.Opacity = 0.70; 
formName.TopMost = true; 

Por supuesto que sería sensato para dibujar una ventana en la parte superior de esta informando al usuario de por qué la pantalla se ha atenuado, con un contador.

Al igual que con el enfoque de captura de pantalla, esto por sí mismo no impide que un usuario de pasándolo mediante el uso de la tecla de Windows, Alt - Tab o Ctrl - Esc para que aparezca el inicio menú, o para cambiar a otras tareas. Eso es un poco más complicado.

8

Eep, leyó mal su pregunta. El cuadro de diálogo UAC de Vista crea un nuevo escritorio y se muestra sobre eso. Para crear un escritorio, puede usar la función CreateDesktop. A continuación, puede usar SwitchDesktop para cambiar a él.

Si realmente desea volver a crear el aspecto del escritorio seguro, primero debe tomar una captura de pantalla y mostrar eso en su formulario, oscurecido un poco.


Respuesta original a continuación, que podrían ser de interés también:

Tome un vistazo a la función LockWorkStation.

Sin embargo, no puede programáticamente desbloquear la estación de trabajo de nuevo. Eso es algo que el usuario tiene que hacer por sí mismo. Por lo tanto, no puede esperar fácilmente un descanso de al menos dos minutos a menos que siga recurriendo a su técnica de ventana de nivel superior para negarle al usuario su espacio de trabajo, siempre y cuando los dos minutos no hayan terminado.

+1

creo que se refiere al estilo UAC, no bloqueando la estación de trabajo – Pondidum

+0

Oh, a la derecha. Mi error. – Joey

+1

+1 para averiguar a qué se refería. Es un paso, al menos. – Will

Cuestiones relacionadas