Comment rendre le système de formulaire modal en utilisant C #?

J’ai besoin d’afficher la forme au niveau le plus élevé du système, par exemple sur / toutes / toutes les autres fenêtres à l’écran. Je me rends bien compte que c’est habituellement / la mauvaise pratique de l’UI /, mais j’ai un scénario très précis à l’esprit.

Nous avons l’intention d’utiliser des PC Windows normaux pour les enregistreurs de caisse aux points de vente. Il y a une option sur l’écran pour ouvrir le tiroir-caisse. Ce serait plutôt dommage pour quelqu’un de simplement appuyer sur quelque chose sur un écran et d’avoir access à de l’argent lorsque le greffier ne regarde pas. Nous avons donc équipé les PC de lecteurs RFID et chaque employé a sa propre carte RFID qui sera utilisée pour l’authentification.

J’ai cependant besoin d’un mécanisme pour verrouiller l’ordinateur (ou le rendre inutilisable) lorsque l’employé s’en va. Se déconnecter semble trop gênant.

Toutes les idées sont les bienvenues.

LP, Dejan

Après une journée d’essais et d’erreurs, j’ai trouvé une solution.

Cela implique les étapes suivantes:

1. Lorsque le bouton “Verrouiller” est appuyé, un nouveau (vide) / bureau / est créé. Le programme est exécuté sur ce bureau avec le formulaire plein écran et la procédure de connexion. Il n’y a rien d’autre à changer ou à exécuter sur ce bureau.

2. Le gestionnaire de tâches est désactivé via le registre. Bien sûr, une personne non invitée peut toujours accéder au menu Ctrl-Alt-Suppr, mais il ne peut rien y faire de mal particulier.

3. Alt-F4 et autres sont désactivés.

4. Une fois l’authentification établie, le programme revient au bureau d’origine et tout se déroule normalement.

Il y a bien sûr quelques invocations / invocations requirejses. Si quelqu’un veut faire quelque chose de similaire, il / elle trouvera peut-être que mon exemple de base est utile – texte du lien

LP, Dejan

Je pense que vous devrez vous pencher sur l’appel de l’API Win32 pour y parvenir.

Vous devrez examiner:

ShowWindow et SetWindowPos

et invoquez-les avec un code similaire au suivant (notez qu’il s’agit d’un pseudo-code):

[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); } 

Form a une propriété TopMost.

set Form.TopMost = true