Вы можете использовать комбинацию TimerDispatcher (аналог таймера WPF) и Windows "Hooks" для захвата позиции курсора в операционной системе.
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetCursorPos(out POINT pPoint);
Точка - это свет struct
. Содержит только поля X, Y.
public MainWindow()
{
InitializeComponent();
DispatcherTimer dt = new System.Windows.Threading.DispatcherTimer();
dt.Tick += new EventHandler(timer_tick);
dt.Interval = new TimeSpan(0,0,0,0, 50);
dt.Start();
}
private void timer_tick(object sender, EventArgs e)
{
POINT pnt;
GetCursorPos(out pnt);
current_x_box.Text = (pnt.X).ToString();
current_y_box.Text = (pnt.Y).ToString();
}
public struct POINT
{
public int X;
public int Y;
public POINT(int x, int y)
{
this.X = x;
this.Y = y;
}
}
Это решение также решает проблему с слишком частым или слишком редким считыванием параметров, поэтому вы можете настроить его самостоятельно. Но помните о перегрузке метода WPF одним аргументом, который представляет ticks
, а не milliseconds
.
TimeSpan(50); //ticks