Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    [C#/WinForms] Verrouiller l'arrière plan ou afficher la fenêtre en plaine écran
    Bonjour,

    Pour commencer je préfère vous prévenir que je suis un débutant en C# mais j'ai l'avantage de comprendre vite.

    Mon problème :

    J'ai créer une application visant a verrouiller un écran.



    Mon problème est que je ne sais pas comment faire pour :

    Soit verrouiller l'accès a tout ce qui ce trouve en arrière plan (autre logiciel, Windows...)
    Soit l'afficher en plaine écran. (plaine écran complet ; barre de tache inclue)



    Merci d'avance pour votre aide
    --------------------------------------------------------------
    Gabin B.

  2. #2
    Futur Membre du Club
    Demande d'information suplémentaire
    Bonjour,
    si vous avez besoin d'informations complémentaire, n'hésité pas à me le demander.

    Gabin B.

  3. #3
    Membre expert
    Citation Envoyé par stagiere251 Voir le message
    Bonjour,
    si vous avez besoin d'informations complémentaire, n'hésité pas à me le demander.

    Gabin B.
    Verrouiller l'accès a tout ce qui ce trouve en arrière plan (autre logiciel, Windows...)=>
    Form Dialog Modal.
    Afficher en plaine écran. (plaine écran complet ; barre de tache inclue)=>Le control Form dispose des props idoines.

  4. #4
    Futur Membre du Club
    Citation Envoyé par MABROUKI Voir le message
    Verrouiller l'accès a tout ce qui ce trouve en arrière plan (autre logiciel, Windows...)=>
    Form Dialog Modal.
    Afficher en plaine écran. (plaine écran complet ; barre de tache inclue)=>Le control Form dispose des props idoines.
    Bonjour,
    Form Dialog Modal
    c'est a dire ? Pourriez vous m'apporter plus de précision sur ce point, s'il vous plait.

    Le control Form dispose des props idoines
    Encore une fois, je suis débutant donc pourriez vous m'apporter un complément d'information sur ce point.

    Merci d'avance pour l'aide que vous pourrez m'apporter.

    Cordialement

    Gabin BROCHARD

  5. #5
    Expert éminent sénior
    il faut aussi bloquer les touches de raccourcis de windows (type ouvrir le menu démarrer, ctrl alt supprt ...)
    et surement d'autres trucs que tu ne vois pas venir

    si tu comprenais vite tu aurais compris qu'il suffit de taper les mots que tu ne comprends pas dans google pour comprendre
    en tapant form dialog modal c# dans google on doit vite tomber sur une explication disant que ca rend une fenêtre prioritaire au sein d'une application ce qui empêche les autres de passer au dessus tant qu'elle n'est pas fermée
    d'ailleurs c'est un mauvais conseil je pense, c'est plutot topmost ou toplevel qu'il te faut qui lui est inter application et pas intra application
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Futur Membre du Club
    Pour commencer Bonjour,
    en général je comprend vite, mais j'avoue que je n'est pas penser sur le coup a chercher sur google.

    Pour :
    il faut aussi bloquer les touches de raccourcis de windows (type ouvrir le menu démarrer, ctrl alt supprt ...)
    et surement d'autres trucs que tu ne vois pas venir
    Je me suis assurer que le gestionnaire destâche ne soit pas accesible sur la session où il y auras le logiciel. Et je me suis aussi assurer que l'on ne puisse fermer la fenêtre sans passer par le bouton "valider" grâce a ceci :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
                    this.Close()

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                e.Cancel = true;
            }
        }


    Je vous remercie pour les conseil que vous m'avez donner, et je me renseigne actuellement sur google pour voir à quoi cela ce rapporte.

    Cordialement

    Gabin

  7. #7
    Membre expert
    Rebonjour
    Jean Gabin ,je plaisante.

    Comme dit par Pol63,la touche RWin dite "win logo" est la plus versatile et nécessite un "hook" API Win 32 (poignée en français qui ouvre le sésame).

    voici un exemple code d' un Form qui occupe le "plein ecran" et dont les touches :
    1/ caracteres + les combinaisaison de touche
    2/ touche RWin
    sont désactivées.
    Ce Form tel quel pourra être hérité et tu peux lui ajouter d'autres fonctionnalités

    code behind.cs :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.Diagnostics;
     
    namespace WinPleinEcran
    {
        public partial class FormRWIN : Form
        {
            // Structure contain information about low-level keyboard input event
            [StructLayout(LayoutKind.Sequential)]
            private struct KBDLLHOOKSTRUCT
            {
                public Keys key;
                public int scanCode;
                public int flags;
                public int time;
                public IntPtr extra;
            }
            //System level functions to be used for hook and unhook keyboard input
            private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr SetWindowsHookEx(int id, LowLevelKeyboardProc callback, IntPtr hMod, uint dwThreadId);
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern bool UnhookWindowsHookEx(IntPtr hook);
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr CallNextHookEx(IntPtr hook, int nCode, IntPtr wp, IntPtr lp);
            [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr GetModuleHandle(string name);
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            private static extern short GetAsyncKeyState(Keys key);
     
            //Declaring Global objects
            private IntPtr ptrHook;
            private LowLevelKeyboardProc objKeyboardProcess; 
     
     
            public FormRWIN()
            {
                ProcessModule objCurrentModule = Process.GetCurrentProcess().MainModule; //Get Current Module
                objKeyboardProcess = new LowLevelKeyboardProc(captureKey); //Assign callback function each time keyboard process
                ptrHook = SetWindowsHookEx(13, objKeyboardProcess, GetModuleHandle(objCurrentModule.ModuleName), 0); //Setting Hook of Keyboard Process for current module
                InitializeComponent();
     
                // ajuste les props
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                this.ShowInTaskbar = true;
                TopMost = true;
                Location = new Point(0, 0);
                this.WindowState = FormWindowState.Maximized;
                this.KeyPreview = true;
                this.BackColor = Color.Violet;
     
                // set tooltip
                this.toolTip1.IsBalloon = true;
                this.toolTip1.ShowAlways = true;
                this.toolTip1.SetToolTip(this, "esc ou space bar pour Quitter");
     
     
     
                // ajuste les handlers pour quitter l'application
                this.KeyPress += new KeyPressEventHandler(FormRWIN_KeyPress);
     
                // HANDLER  A DES FINS DE DEMONSTRATION
                this.KeyDown += new KeyEventHandler(FormRWIN_KeyDown);
     
                // cet event est necessaire pour positionner correctement le bouton Reduire (minimizer)
                this.SizeChanged += new EventHandler(FormRWIN_SizeChanged);
            }
            private void btnReduire_Click(object sender, EventArgs e)
            {
                this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
            }
            void FormRWIN_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.Escape)
                    Application.Exit();
                else if (e.KeyChar == (char)Keys.Space)
                    Application.Exit();
            }
            void FormRWIN_KeyDown(object sender, KeyEventArgs e)
            {
                MessageBox.Show("touche WinLogo est desactivee");
                if (e.KeyCode == Keys.RWin)
                {
     
                    MessageBox.Show("Ce message est envoye aux oubliettes");
                }
     
            }
     
     
     
     
            void FormRWIN_SizeChanged(object sender, EventArgs e)
            {
                btnReduire.Location = new Point(this.Right - 100, this.Bottom - 100);
     
            }
            private IntPtr captureKey(int nCode, IntPtr wp, IntPtr lp)
            {
                if (nCode >= 0)
                {
                    KBDLLHOOKSTRUCT objKeyInfo = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lp, typeof(KBDLLHOOKSTRUCT));
     
                    if (objKeyInfo.key == Keys.RWin || objKeyInfo.key == Keys.LWin) // Disabling Windows keys
                    {
                        return (IntPtr)1;
                   }
               }
               return CallNextHookEx(ptrHook, nCode, wp, lp);
           }
     
     
        }
    }

    bon code...

  8. #8
    Futur Membre du Club
    Bonjour,
    Merci pour votre réponse MABROUKI,

    je n'est malheureusement pas les compétence nécessaire pour comprendre tout votre code.
    Si je ne me trompe pas je crois que vous utiliser un "DDL", encore une fois si j'ai bien compris cela permet d'ajouter des fonctions qui ne sont pas présente de base. Donc si c'est cela pourriez-vous m'expliquer comment je peut l'utilisé.

    Voici mon code actuel :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace loking
    {
     
     
     
        public partial class Form1 : Form
        {
     
            //Variable
            string motdepasse = "valid";
            int nberreur;
     
     
            void testmdp()
            {
                if (textBox1.Text == motdepasse)
                {
                    this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
                    this.Close();
                }
                else if (textBox1.Text != motdepasse & nberreur == 3)
                {
                    label3.Text = "Un Mot de Passe Incorrecte a été saisie à 3 reprise. Veuillez entrée le mot de passe administrateur";
                    motdepasse = "emmauscaisse";
                    textBox1.Text = "";
                }
                else if (textBox1.Text != motdepasse)
                {
                    label3.Text = "Le Mot de Passe saisie est Incorrecte";
                    textBox1.Text = "";
                    nberreur = nberreur + 1;
                }
            }
     
            public Form1()
            {
                InitializeComponent();
                label3.Text = "";
            }
     
     
     
            private void button2_Click(object sender, EventArgs e)
            {
                testmdp();
            }
     
            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.Enter)
                {
                    testmdp();
                }
            }
     
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                e.Cancel = true;
            }
        }
    }


    La première chose que je cherche à faire c'est obliger a l'utilisateur d'entrée le mot de passe avant d'accès à quoi que ce soit et donc l'empêcher d’accéder au autre application en cours. (Soit en utilisant un mode plaine écran soit en bloquant le reste des application).

    J'ai cru voir dans votre code un passage permettant de mettre en plaine écran la fenêtre pourriez vous me ré-indiquer ce code et me dire où le mettre (si ce n'est pas trop demander).

    Cordialement

    Gabin B.

  9. #9
    Membre expert
    Rebonjour

    Des "dll" ,pas "ddl" qui contiennent des fonctions du systeme d'exploitation Windows.
    La question a change !
    De ce que j'ai compris de ton code ,tu veux coder un LoginForm .
    Un tel form s'affiche en forme modale (boite de dialogue) par le MainForm de l'application (form de démarrage).


    Code behind.cs revu du class de cryptage du mot de passe et du nom d'user.
    Le cryptage est disponible dans l'API .Net.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    using System;
    using System.Security.Cryptography;
    using System.Text;
     
    namespace WinLogin
    {
        static class  Hashing
        {
            public static string GetHash(string plainText)
            {
                // ----- Generate a hash. Return an empty string
    	        //       if there are any problems.
    	        byte[] plainBytes ;
    	        MD5CryptoServiceProvider hashEngine;
    	        byte[] hashBytes ;
    	        string hashText;
                try 
    	        {	        
    		        // Convert the plain text to a byte array.
    	            plainBytes = Encoding.UTF8.GetBytes(plainText);
                    hashEngine = new MD5CryptoServiceProvider();
                    hashBytes = hashEngine.ComputeHash(plainBytes);
                    // Convert the hash bytes to a hexadecimal string.
    	            hashText =BitConverter.ToString(hashBytes).Replace("-","" );
     
                    return hashText;
                }
    	        catch (Exception)
    	        {
     
    		            return "";
    	        }
     
            }
        }
    }



    Code behind.cs revu du LoginForm.cs(boite de saisie )

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    namespace WinLogin
    {
        public partial class LoginForm : Form
        { 
            private int nberreur = 1;
            private int maxErreurs = 5;
            public LoginForm()
            {
                InitializeComponent();
                this.CancelButton = this.Cancel_Button;
                this.Load += new EventHandler(LoginFormDialog_Load);
            }
     
            void LoginFormDialog_Load(object sender, EventArgs e)
            {
                this.UsernameTextBox.Text = "AlbertE";
                this.PasswordTextBox.Text = "E=MC2";
                this.PasswordTextBox.UseSystemPasswordChar = true;
            }
     
            private void Cancel_Button_Click(object sender, EventArgs e)
            {
                 this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
                 this.Close();
            }
     
            private void btnLogin_Click(object sender, EventArgs e)
            {
                TestPWD();
            }
            private void TestPWD()
            {
                string result = string.Empty;
     
               // Store only the hashed values, not the plain text.
                string hashUserName  =Hashing.GetHash("AlbertE");
                string hashPassword = Hashing.GetHash("E=MC2");
     
                string hashUserInput = String.Empty;
                string hashPassInput = String.Empty;
     
                // Hash the input values.
     
                hashUserInput = Hashing.GetHash(this.UsernameTextBox.Text);
                hashPassInput = Hashing.GetHash(this.PasswordTextBox.Text);
     
                //  Test 
                if (hashUserName == hashUserInput &&
                      hashPassword == hashPassInput)
                { 
                    result = "Yes, you passed the test!";
                    MessageBox.Show(result);
                    this.DialogResult = System.Windows.Forms.DialogResult.OK;
                    this.Close();
                }
                else if (nberreur <= maxErreurs)
                { 
                   this.UsernameTextBox.Select(0, this.UsernameTextBox.TextLength);
                   this.UsernameTextBox.Focus();
     
                   this.PasswordTextBox.Select(0, this.PasswordTextBox.TextLength);
                   this.PasswordTextBox.Focus();
     
                    result = "invalid username or invalid password.";
     
                    lblMessage.Text=result + "  Nb Erreurs :" + nberreur.ToString();
                    nberreur += 1;
                }
                else
                { 
                    this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
                    this.Close();
                }
     
            }
        }
    }


    Code behind.cs du MainForm.cs(un form Login doit être lance en forme modale par un form principal de l'application):
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    namespace WinLogin
    {
        public partial class MainForm : Form
        { 
            private LoginForm loginForm;
     
            public MainForm()
            {
                InitializeComponent();
                this.Text = "MainForm";
                this.Load += new EventHandler(MainForm_Load);
            }
     
            void MainForm_Load(object sender, EventArgs e)
            {
                // hide  application
                this.Hide();
                loginForm = new LoginForm();
                if (loginForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    // start application
                    this.Show();
                else
                {
                    MessageBox.Show("bye bye");
                    // close application
                    this.Close();
                }
     
            }
     
     
        }
    }

    Les 2 mots de passe sont donnés en clair dans FormLogin mais en réalité il faut les récupérer d'une bd SQL.
    bon code....

  10. #10
    Futur Membre du Club
    Bonsoir,

    J'ai du mal m'exprimer dans mon dernier message car ma question n'as pas changer. (Comment mettre ma form en mode plein écran qui couvre la barre des tache ?), la seul chose qui est pu changer c'est l'ajout, comme vous avez pu me le faire remarquer, d'un moyen de bloquer les action des bouton Windows et ctrl.

    Dans mon dernier message j'ai essayer de vous donner une vue d'ensemble pour que vous puissiez mieux m'aider.

    Merci pour les indications et les code que vous m'avez envoyer mais très franchement je ne cherche pas à faire un truc très complexe, j'ai besoin de pouvoir verrouiller l'accès à l'écran d'un pc pendant de très courte période quand personne est devant, car voici ce que l'on peut y voir en plein milieu:



    un bouton permettant tout simplement d'ouvrir le tiroir caisse
    j'ai donc créer cette application pour verrouiller l'accès à l'écran quand exceptionnellement la vendeuse ou le vendeur s'absente.

    Bilan :

    Je cherche à :

    • Bloquer les effet des touche "windows" et "ctrl"
    • mettre mon application dans un mode plein écran etl qui recouvre la barre des tâche



    Cordialement

    Gabin B.

  11. #11
    Membre expert
    Citation Envoyé par stagiere251 Voir le message
    Bonsoir,


    un bouton permettant tout simplement d'ouvrir le tiroir caisse
    j'ai donc créer cette application pour verrouiller l'accès à l'écran quand exceptionnellement la vendeuse ou le vendeur s'absente.

    Je cherche à :

    1/Bloquer les effet des touche "windows" et "ctrl"
    2/mettre mon application dans un mode plein écran etl qui recouvre la barre des tâche
    Gabin B.
    Pas très clair ,moi je ne vois pas toujours le lien avec le Form plein écran et le form Login posté par la suite
    que fait le bouton Tiroir caisse ? lance-t-il le form login?
    Un squelette du code d'ensemble de ce que tu veux faire ,mémé avec un To Do explicatif serait le bienvenu.

  12. #12
    Expert éminent sénior
    Je pense qu’il veut une appli qui soit la seule utilisable sur Windows. C’est souvent le cas sur des apps de saisie commerciale.
    Et il veut une saisie de mot de passe au début de l’appli. C’est souvent le cas sur une appli
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Futur Membre du Club
    Bonjour,

    Je vais esseyé d'être le plus claire possible :

    Dans mon denier message j'ai esseyer de présenter le context pour vous aider a comprendre. Le bouton "tiroir" ouvre un tiroir caisse mais il se trouve sur une application développé par quelqu'un d'autre. je souhaite donc que mon application "verrouille" l'écran.
    Pour cela je me suis assurer que l'on ne puisse la fermer que en saisissant le mot de passe. et il me reste deux questions.

    Mes questions sont : comment puis-je la mettre en plein écran, de manière à ce qu'elle recouvre la totalité de l'écran, barre des tâche inclue ?
    Ma deuxième question est comment puis-je bloquer les touche "Windows" et "ctrl"


    Cordialement

    Gabin B.

  14. #14
    Membre expert
    quoteBonjour,

    Je vais esseyé d'être le plus claire possible :

    Dans mon denier message j'ai esseyer de présenter le context pour vous aider a comprendre. Le bouton "tiroir" ouvre un tiroir caisse mais il se trouve sur une application développé par quelqu'un d'autre. je souhaite donc que mon application "verrouille" l'écran.
    Pour cela je me suis assurer que l'on ne puisse la fermer que en saisissant le mot de passe.
    Mes questions sont : comment puis-je la mettre en plein écran, de manière à ce qu'elle recouvre la totalité de l'écran, barre des tâche inclue ?
    Ma deuxième question est comment puis-je bloquer les touche "Windows" et "ctrl"[ Cordialement [/QUOTE]

    Etant donné qu'il s'agit d'une app dite "tiroir caisse" ,je ne vois qu'une seule issue à ton syndrome d'apprenti programmeur :
    Programmer en c# un "ScreenSaver" ou Economiseur d'Ecran avec des bulles voltigeantes ,accès avec mot de passer et délai ou minutage de son démarrage (1 mn) que tu installeras ( requiert des droits admin) sur chaque poste utilisateur de caissier.
    Tu tapes sur Google ,comme bien dit par Pol63 ceci : screensaver in c#.