每隔X秒获取鼠标位置

时间:2014-08-27 13:45:04

标签: c# timer

我试图每隔5秒获取一次鼠标的位置(x,y),所以我使用此代码来获取它

[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
    public int X;
    public int Y;
    public static implicit operator Point(POINT point)
    {
        return new Point(point.X, point.Y);
    }
}         

[DllImport("user32.dll")]
public static extern bool GetCursorPos(out POINT lpPoint);   
public static Point GetCursorPosition()
{
    POINT lpPoint;
    GetCursorPos(out lpPoint);
    return lpPoint;
}

但是我必须运行这个方法来获取鼠标的新位置,所以我找到了这个代码,我不知道如何使用它:

 var timer = new System.Threading.Timer(
        e => Mymethode(),  
        null, 
        TimeSpan.Zero, 
        TimeSpan.FromMinutes(5));

如何一起使用此代码每隔5秒显示(控制台)位置

3 个答案:

答案 0 :(得分:0)

这样的事情:

        var timer = new System.Threading.Timer(
            e =>
            {
                var p = GetCursorPosition();
                Console.WriteLine(string.Format("X: {0}, Y: {1}", p.X, p.Y));
            },
            null,
            TimeSpan.Zero,
            TimeSpan.FromSeconds(5));

您只需在计时器回调中调用GetCursorPosition,然后根据值执行任何操作。

这是一个完整的工作控制台应用程序,它将每隔5秒显示一次光标位置,直到您按Enter键:

using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Program
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct POINT
        {
            public int X;
            public int Y;
        }
        [DllImport("user32.dll")]
        public static extern bool GetCursorPos(out POINT lpPoint);
        public static POINT GetCursorPosition()
        {
            POINT lpPoint;
            GetCursorPos(out lpPoint);
            return lpPoint;
        }

        static void Main(string[] args)
        {
            var timer = new System.Threading.Timer(
                e =>
                {
                    var p = GetCursorPosition();
                    Console.WriteLine(string.Format("X: {0}, Y: {1}", p.X, p.Y));
                },
                null,
                TimeSpan.Zero,
                TimeSpan.FromSeconds(5));

            Console.ReadLine();
        }
    }
}

注意我取出了将结构POINT转换为Point的部分,但您可以将其重新放入。不清楚您在那里Point使用了什么。

答案 1 :(得分:0)

System.Timers.Timer GetMousePosition = new System.Timers.Timer();
GetMousePosition.Interval=5000;
GetMousePosition.Elapsed += new System.Timers.ElapsedEventHandler(GetMousePosition_Elapsed);

void GetMousePosition_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
  POINT CursorPositon= GetCursorPosition()
  textBox1.AppentText("Cursor is in X Coordinate: "+CursorPositon.X.ToString()+" and Y-Coordinate "+ CursorPositon.X.ToString());
}

答案 2 :(得分:0)

也许你想要的只是一个计时器刻度事件,每隔5秒就会调用你的" GetCursorPos"并打印鼠标的位置。

尝试以下内容:

Timer clock = new Timer();
        clock.Interval = 5000; //Miliseconds
        clock.Tick += clock_Tick;
        clock.Start();

在你的clock_Tick:

void clock_Tick(object sender, EventArgs e)
    {
        Console.Writeline(GetCursorPos());
    }