Zeitgesteuerter Logout

W

Wächter_der_Nacht

Wie der Titel schon sagt, versuche ich einen zeitgesteuerten LogOut zu programmieren.
Dabei lasse ich eine Stoppuhr laufen die ich zurück setze sobald der Benutzer Maus oder Tastatur benutzt.
Allerdings bin ich mir nicht sicher ob die Lösung elegant ist oder ob es einen besseren Ansatz dafür gibt.
Die IDs für die Message.msg hab ich durch ausprobieren raus bekommen.
Weiss zufällig jemand wo man die IDs aufgelistet finden kann?

Hier mal mein Lösungsansatz:
Code:
 public partial class Form1 : Form
    {
        const int WM_MouseLeft = 513;
        const int WM_MouseRight = 516;
        const int WM_MouseWheel = 522;
        const int WM_KeyDown = 256;
        List<Int32> wm_IDs = new List<int>();

        private Stopwatch sw = new Stopwatch();
        private Timer t1 = new Timer();
        const int timeLimit = 10;

        public Form1()
        {
            InitializeComponent();

            wm_IDs.Add(WM_MouseLeft);
            wm_IDs.Add(WM_MouseRight);
            wm_IDs.Add(WM_MouseWheel);
            wm_IDs.Add(WM_KeyDown);

            sw.Start();

            t1.Interval = 1000;
            t1.Tick += new EventHandler(t1_Tick);
            t1.Start();

        }

        /// <summary>
        /// Überprüft im eingestellten Intervall ob das Zeitlimit überschritten wurde
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void t1_Tick(object sender, EventArgs e)
        {
            if ((sw.ElapsedMilliseconds / 1000) > timeLimit)
                LogOut();
        }

        /// <summary>
        /// Überprüft alle Meldungen auf deren Auslöser und setzt die Stopuhr zurück
        /// wenn die Meldung von der Maus oder Tastatur ausgelöst wurde.
        /// </summary>
        /// <param name="m"></param>
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);

            if (wm_IDs.Contains(m.Msg))
            {
                Console.WriteLine("Stopuhr nach " + sw.ElapsedMilliseconds / 1000 + " Sekunden zurück gesetzt.");
                sw.Reset();
                sw.Start();
            }
        }

        private void LogOut()
        {
            Application.Exit();
        }

    }

Wäre super wenn mir jemand kurzes Feedback oder objektive Kritik/Verbesserungsvorschläge geben könnte.
 

Anhänge

  • AutomatedLogOut.zip
    14,1 KB · Aufrufe: 15
Zurück