Это не отказоустойчивое решение, но это чистый .NET, и он очень прост. Добавьте таймер в вашу форму, установите его на относительно короткую задержку (100-150 мс показались мне нормальными). Добавьте следующий код для событий Form.LocationChanged и Timer.Tick:
private void Form_LocationChanged(object sender, EventArgs e)
{
if (this.Text != "Moving")
{
this.Text = "Moving";
}
tmrStoppedMoving.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
tmrStoppedMoving.Start();
this.Text = "Stopped";
}
Если вам нужна более точная обработка (точно зная, когда кнопка мыши отпущена в строке заголовка и т. Д.), Вам, вероятно, придется погрузиться в сообщения окон мониторинга.