Вы можете сделать это с помощью глобальной мыши и клавиатуры hook .Фактически, он был упакован в хорошо документированный, хорошо структурированный .NET API на CodePlex
Перейдите туда и загрузите его.Затем настройте глобальный хук мыши:
_mouseListener = new MouseHookListener(new GlobalHooker());
_mouseListener.MouseMove += HandleGlobalHookMouseMove;
_mouseListener.Start();
Ключ в том, что вы получите событие MouseMove ЛЮБОЕ время, когда мышь перемещается ЛЮБОЕ на рабочем столе, а не только в пределах вашего окна.
private void HandleAppHookMouseMove(object sender, MouseEventArgs e)
{
if (this.Bounds.Contains(e.Location))
{
HandleEnter();
}
else
{
HandleLeave();
}
}
Вы также можете настроить один для MouseClick
.Сочетание этих двух параметров позволит вам определить, когда мышь перемещается над исходной формой, или когда щелкает указатель мыши над ней.В отличие от LostFocus
и других событий, которые вы пробовали, фокус не имеет значения.