Avatar billede anri Novice
18. december 2004 - 20:31 Der er 9 kommentarer og
1 løsning

Detecte mouse-movement

Jeg er ved at lave en applikation der automatisk låser når der ikke har været bruger-aktivitet i 10 sekunder.
Jeg kan godt detecte tastetryk, men hvordan detecter jeg om musen har været flyttet?
Avatar billede m_els Nybegynder
19. december 2004 - 01:13 #1
Du kan f.eks. lave en mouse_move event på din form. Se evt nedenstående eksempel:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace test
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Timers.Timer timer1;
        private System.Windows.Forms.TextBox textMouse;
        private System.Windows.Forms.TextBox textTid;
        int sek = 0;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
           
           

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.textMouse = new System.Windows.Forms.TextBox();
            this.timer1 = new System.Timers.Timer();
            this.textTid = new System.Windows.Forms.TextBox();
            ((System.ComponentModel.ISupportInitialize)(this.timer1)).BeginInit();
            this.SuspendLayout();
            //
            // textMouse
            //
            this.textMouse.Location = new System.Drawing.Point(64, 112);
            this.textMouse.Name = "textMouse";
            this.textMouse.Size = new System.Drawing.Size(136, 20);
            this.textMouse.TabIndex = 0;
            this.textMouse.Text = "";
            //
            // timer1
            //
            this.timer1.Enabled = true;
            this.timer1.Interval = 1000;
            this.timer1.SynchronizingObject = this;
            this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
            //
            // textTid
            //
            this.textTid.Location = new System.Drawing.Point(64, 64);
            this.textTid.Name = "textTid";
            this.textTid.Size = new System.Drawing.Size(136, 20);
            this.textTid.TabIndex = 1;
            this.textTid.Text = "";
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.Add(this.textTid);
            this.Controls.Add(this.textMouse);
            this.Name = "Form1";
            this.Text = "Form1";
            this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove);
            ((System.ComponentModel.ISupportInitialize)(this.timer1)).EndInit();
            this.ResumeLayout(false);

        }

       

        #endregion

        private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            sek = 0;
            textMouse.Text = "Musen blev flyttet";
        }

        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            sek++;
            if (sek>10)
            {
                textMouse.Text = "Der er nu gået 10 sek...";
            }
            else
                textTid.Text = ""+sek;
        }

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

       

    }
}
Avatar billede anri Novice
19. december 2004 - 13:18 #2
Ja, jooh.
Problemet her, er at Mouse_move ikke bliver kaldt hvis pointeren ligger på en af hoved-formens child-komponenter.

Altså hvis jeg putter et panel eller en tabcontrol, på hovedformen, der fylder det hele, så duer det ikke..
Sagen er nemli' den, at jeg har en hel del paneler på min form.
Avatar billede shah_khan Nybegynder
20. december 2004 - 16:48 #3
du kan lave en "protected override void OnMouseMove(MouseEventArgs e)" funktion som bliver kaldt også når musen er over andre kontrols som ligger på formen.
Avatar billede wisen Nybegynder
21. december 2004 - 08:43 #4
.. du kan implementere interfacet IMessageFilter på din hovedform - så vil den få alle beskeder.

Prøver lige om jeg kan finde et link :)
Avatar billede wisen Nybegynder
21. december 2004 - 08:55 #5
Her er et par stykker :

http://www.csharphelp.com/archives/archive162.html
http://www.codeproject.com/csharp/IMessageFilterArticle.asp

... en ande måde er at lytte på Application.OnIdle eventet
Avatar billede wisen Nybegynder
21. december 2004 - 11:38 #6
.. her er en anden go' artikel :

http://www.codeproject.com/csharp/uim.asp
Avatar billede wisen Nybegynder
03. januar 2005 - 18:21 #7
... er du kommet videre ?
Avatar billede anri Novice
04. januar 2005 - 14:04 #8
Yeps, jeg lavede et hook på samme måde som i den sidste artikel du linkede til, så lav bare et svar...
Avatar billede wisen Nybegynder
04. januar 2005 - 15:27 #9
1 stk. svar
Avatar billede wisen Nybegynder
20. januar 2005 - 07:57 #10
Takker for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester