2009-07-23 15 views
8

Necesito mostrar el formulario como nivel superior en todo el sistema, p. sobre/todo/otras ventanas en la pantalla. Me doy cuenta de que esto es generalmente/mala práctica de IU /, pero tengo un escenario muy específico en mente.¿Cómo hacer que el sistema de formulario sea modal usando C#?

Tenemos la intención de utilizar PC normales con Windows para registradores de efectivo POS. Hay una opción en la pantalla para abrir el cajón de efectivo. Sería bastante malo para alguien simplemente presionar algo en una pantalla y tener acceso a dinero cuando el empleado no está mirando. Así que equipamos computadoras con lectores RFID y cada empleado tiene su propia tarjeta RFID que se usará para la autenticación.

Necesito sin embargo un mecanismo para bloquear la computadora (o hacerla inutilizable) cuando el empleado se va. Cerrar la sesión parece demasiado molesto.

Cualquier idea bienvenida.

LP, Dejan

+0

Así que básicamente desea volver a implementar la pieza de bloqueo de Windows? Bueno, buena suerte con conseguir la seguridad lo suficientemente buena. –

+0

No, no tengo intención de hacer eso. Idealmente, quisiera/utilizar/la parte de bloqueo de Windows. Si tiene alguna idea de cómo hacerlo desde C#, me gustaría saberlo. –

+2

Ther clerk puede bloquear las ventanas usando la tecla Win + L. Cuando regrese, puede desbloquearlo ingresando su contraseña. ¿No funcionará eso? – chikak

Respuesta

8

Bueno, después de un día de prueba y error llegué a una especie de solución.

comprende los siguientes pasos:

1. Cuando el botón "Lock" se presiona nuevo (vacío)/escritorio/es creado. El programa se ejecuta en este escritorio con formulario de pantalla completa y procedimiento de inicio de sesión. No hay nada más para cambiar o ejecutar en este escritorio.

2. Administrador de tareas está deshabilitado a través del registro. Por supuesto, alguien que no haya sido invitado todavía puede acceder al menú Ctrl-Alt-Delete, pero no hay nada de particular daño que pueda hacer allí.

3. Alt-F4 y tal están deshabilitados.

4. Cuando se realiza la autenticación, el programa vuelve al escritorio original y todo continúa normalmente.

Se requiere P/Invocaciones, por supuesto. Si alguien quiere hacer algo similar, tal vez s/que van a encontrar mi ejemplo huesos desnudos útil - link text

LP, Dejan

-2

formulario tiene una propiedad superior.

conjunto Form.TopMost = true

+0

Esto no ayuda. Uno puede simplemente presionar la tecla de Windows. –

1

pienso que usted tiene que mirar en llamar a la API de Win32 para lograrlo.

Tendrá que buscar en:

ShowWindow y SetWindowPos

y invocarlos con un código similar a lo siguiente (tenga en cuenta que esto es pseudo-código):

[DllImport("user32.dll")] 
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

static void ShowTopmost(Form frm) 
{ 
    ShowWindow(frm.Handle, SW_SHOWMAXIMIZED); 
    SetWindowPos(frm.Handle.ToInt32(), HWND_TOPMOST, 
     0, 0, [width of desktop], [height of desktop], 
     SWP_SHOWWINDOW); 
} 
+0

Gracias por su sugerencia, aunque fui por otra ruta ... –

Cuestiones relacionadas