• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 694
  • Last Modified:

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
0
srk1982
Asked:
srk1982
  • 9
  • 6
  • 2
1 Solution
 
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
 
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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
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
 
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

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 9
  • 6
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now