2009-07-23 17 views
8

Devo mostrare il modulo come livello principale a livello di sistema, ad es. sopra/tutte/altre finestre sullo schermo. Mi rendo conto che questo è di solito/cattiva pratica dell'interfaccia utente /, ma ho in mente uno scenario molto specifico.Come rendere il modal modal di sistema usando C#?

Abbiamo intenzione di utilizzare normali PC Windows per registratori di cassa POS. C'è un'opzione sullo schermo per aprire il cassetto contanti. Sarebbe piuttosto negativo per qualcuno solo premere qualcosa su uno schermo e ottenere l'accesso ai soldi quando l'impiegato non sta guardando. Quindi abbiamo equipaggiato PC con lettori RFID e ogni impiegato ha la sua propria carta RFID che verrà utilizzata per l'autenticazione.

Ho bisogno comunque di un meccanismo per bloccare il computer (o renderlo inutilizzabile) quando l'impiegato se ne va. La disconnessione sembra troppo fastidiosa.

Tutte le idee sono benvenute.

LP, Dejan

+0

Quindi, in pratica si vuole reimplementare la parte di bloccaggio di Windows? Bene, buona fortuna per ottenere la sicurezza abbastanza bene. –

+0

No, non ho intenzione di farlo. Idealmente, mi piacerebbe/utilizzare/la parte di blocco di Windows. Se hai qualche idea su come farlo da C#, sarei felice di sapere. –

+2

L'impiegato può bloccare la finestra usando il tasto Win + L. Quando torna, può semplicemente sbloccarlo inserendo la sua password. Non funzionerà? – chikak

risposta

8

Bene, dopo un giorno di prove ed errori sono arrivato a una soluzione.

Esso prevede le seguenti fasi:

1. Quando il tasto "Lock" viene premuto di nuovo (vuoto)/da tavolo/viene creato. Il programma viene eseguito su questo desktop con modulo a schermo intero e procedura di accesso. Non c'è nient'altro da utilizzare o girare su questo desktop.

2. Task Manager è disabilitato tramite il registro. Ovviamente, qualcuno non invitato può ancora accedere al menu Ctrl-Alt-Canc, ma non c'è nulla di particolarmente pericoloso che possa fare lì.

3. Alt-F4 e tali sono disabilitati.

4. Al momento dell'autenticazione, il programma torna al desktop originale e tutto procede normalmente.

Ci sono alcuni P/Invocare richiesti, ovviamente. Se qualcuno vuole fare qualcosa di simile, forse s/egli sarà trovare il mio ossa nude esempio utile - link text

LP, Dejan

-2

modulo ha una proprietà TopMost.

set Form.TopMost = true

+0

Questo non aiuta. Si può semplicemente premere il tasto Windows. –

1

Penso che avrete bisogno di guardare in basso per chiamare l'API Win32 per raggiungere questo obiettivo.

Avrete bisogno di guardare in:

ShowWindow e SetWindowPos

e richiamare con il codice simile al seguente (notare che questo è pseudo-codice):

[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

Grazie per il suggerimento, anche se sono andato su un'altra strada ... –