Tracking mouse movement in winforms

Hi experts,

         In my attached file[code.txt], i am showing a screensaver to the user after the delay of 8 minutes.

         Now, i shud deactivate the screesaver on mouse click and mouse movement anywhere in the form. I have written the MouseCaptureChanged event to close the screensaver.

         How to exit the screensaver on a movement in mouse ????

         Please help me on this. I am a new bie in winforms...Thanks.
private void Screensaver_MouseCaptureChanged(object sender, EventArgs e)
        {
            this.Close();
        }

Open in new window

code.txt
srk1982Asked:
Who is Participating?
 
burningmaceCommented:
Sorry, my code was bad. Forgot that the second parameter was a size and not a point. Do it this way:
    Private LastPos As Point = Form.MousePosition
 
    Private Sub frmMain_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
	Dim x_diff As Integer = Math.Abs(LastPos.X - Form.MousePosition.X)
	Dim y_diff As Integer = Math.Abs(LastPos.Y - Form.MousePosition.Y)
        If x_diff > 10 Or y_diff > 10 Then
            Application.Exit()
        End If
    End Sub

Open in new window

0
 
iHadiCommented:
Hi

try using :

Application.Exit(); instead of this.Close();
0
 
srk1982Author Commented:
Hi iHadi,

my question is

 How to exit the screensaver on a movement in mouse ????


Thanks...
0
Cloud Class® Course: Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

 
srk1982Author Commented:
Hi iHadi,

my question is

 How to exit the screensaver on a movement in mouse ????

 I want to capture the mouse movement on the screen and if there is any movement just close the window.


Thanks...
0
 
iHadiCommented:
try
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    Application.Exit();
    // or
    // this.Close();
}

Open in new window

0
 
srk1982Author Commented:
Hi iHadi,

     I tried that already...
     If i use that, the screensaver is vanishning in less than one second, even if there is no mouse movement and keyboard inputs.  :(
0
 
iHadiCommented:
try the following:
bool beginDetect;
 
public Form1()
{
    InitializeComponent();
    timer1.Interval = 1000;
    timer1.Start();
}
 
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    if (beginDetect)
        Application.Exit();
}
 
private void timer1_Tick(object sender, EventArgs e)
{
    beginDetect = true;
    timer1.Stop();
}

Open in new window

0
 
srk1982Author Commented:
Hi iHadi,

    I am experiancing the same problem, the screensaver vanishes automatically.
    please see the below code.

    this.close() - exits the screensaver form.
    application.exit() - exits the whole application.

Thanks..
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;
namespace WinDemo
{
    public partial class Screensaver : Form
    {
        bool beginDetect;
 
        public Screensaver()
        {
            InitializeComponent();
            timer1.Interval = 1000;
            timer1.Start();
 
            this.FormBorderStyle = FormBorderStyle.None;
            this.WindowState = FormWindowState.Maximized;
            this.Size = new Size(this.Size.Width * 2, this.Size.Height); 
        }
       
        private void Screensaver_MouseCaptureChanged_1(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void Screensaver_MouseMove(object sender, MouseEventArgs e)
        {
            if (beginDetect)
                this.Close();
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            beginDetect = true;
            timer1.Stop();
        }     
    } 
}

Open in new window

0
 
iHadiCommented:

        private void Screensaver_MouseCaptureChanged_1(object sender, EventArgs e)
        {
            if (beginDetect)
                this.Close();
        }

Open in new window

0
 
srk1982Author Commented:
Hi :iHadi,

     MouseCaptureChanged event accepts only right clicks and not working for
mouse movements.
0
 
iHadiCommented:
Then just ignore it and don't use it. The MouseMove event will be enough. If you are still having the problem, please post your full code or attach the form's files so I can have a look at it.
0
 
srk1982Author Commented:
Hi Hiadi,

     Please take a look at the posted code.
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;
namespace WinDemo
{
    public partial class Screensaver : Form
    {
        bool beginDetect;
 
        public Screensaver()
        {
            InitializeComponent();
            timer1.Interval = 1000;
            timer1.Start();
 
            this.FormBorderStyle = FormBorderStyle.None;
            this.WindowState = FormWindowState.Maximized;
            this.Size = new Size(this.Size.Width * 2, this.Size.Height); 
        }
 
        private void Screensaver_MouseMove(object sender, MouseEventArgs e)
        {
            if (beginDetect)
                this.Close();
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            beginDetect = true;
            timer1.Stop();
        }     
    } 
}

Open in new window

0
 
iHadiCommented:
The code is working great for me. Let me describe what I understand the code should do. When the program is run, the screensaver form appears in maximized state. If the mouse moves or clicks, the form should close. There is a delay of 1 second so the form displays and stabilize before reacting to mouse events.

Did I get everything right or is there any other requirements?
0
 
burningmaceCommented:
You should create a tollerance for MouseMove. If the movement exceeds n pixels, exit the program.
    Private LastPos As Point = Form.MousePosition
 
    Private Sub frmMain_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        Dim diff As Point = Point.Subtract(LastPos, Form.MousePosition)
        If Math.Abs(diff.X) > 10 Or Math.Abs(diff.Y) > 10 Then
            Application.Exit()
        End If
    End Sub

Open in new window

0
 
srk1982Author Commented:
Hi burningmace,

        I am getting the following error if i use ur code...

Error      1      The best overloaded method match for 'System.Drawing.Point.Subtract(System.Drawing.Point, System.Drawing.Size)' has some invalid arguments

Error      2      Argument '2': cannot convert from 'System.Drawing.Point' to 'System.Drawing.Size'
0
 
srk1982Author Commented:
Hi iHadi,

     Yes you are right. But when i write the mousemove event, the form is exiting without an mouse movement. wierd is'nt it !!!?
0
 
srk1982Author Commented:
SOMEONE PLEASE HELP ME ON THIS...
ITS URGENT
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.