C# 如何在WPF/C中检测鼠标是否在我的窗口范围内和范围外移动?

C# 如何在WPF/C中检测鼠标是否在我的窗口范围内和范围外移动?,c#,wpf,mouseevent,C#,Wpf,Mouseevent,我有一个小视频应用程序,我想给vlc一样的功能。我的意思是,在鼠标移动或鼠标不移动时,某个元素消失并出现。我有一个粗略的概念如何做到这一点,但我不知道如何才能检测到鼠标是否在移动。我曾考虑过使用GetPosition函数,但这只会给我鼠标的位置,不会让我知道光标是否在移动。我想使用计时器倒计时2-3秒后,鼠标已经停止移动,然后要么淡出控制或只是让它崩溃,没有进一步的麻烦。我不能每毫秒检查一次位置变量的值。还有其他方法吗?您可以使用钩子功能,以便在鼠标移动时收到通知,我使用免费开源库 如何使用它:

我有一个小视频应用程序,我想给vlc一样的功能。我的意思是,在鼠标移动或鼠标不移动时,某个元素消失并出现。我有一个粗略的概念如何做到这一点,但我不知道如何才能检测到鼠标是否在移动。我曾考虑过使用GetPosition函数,但这只会给我鼠标的位置,不会让我知道光标是否在移动。我想使用计时器倒计时2-3秒后,鼠标已经停止移动,然后要么淡出控制或只是让它崩溃,没有进一步的麻烦。我不能每毫秒检查一次位置变量的值。还有其他方法吗?

您可以使用钩子功能,以便在鼠标移动时收到通知,我使用免费开源库

如何使用它:

using Gma.UserActivityMonitor.GlobalEventProvider;

GlobalEventProvider _globalEventProvider1 
                                 = new Gma.UserActivityMonitor.GlobalEventProvider();

this.globalEventProvider1.MouseMove += HookMouseMove;//to listen to mouse move

抓住老鼠。如果用户实际单击其他任何位置,则释放捕获。然后可以使用标准的WPF鼠标移动事件

myElement.MouseMove += (my MouseMove handler)
Mouse.Capture(myElement);

我不认为捕获鼠标是必要的,PreviewMouseMove仍然会到达
窗口
,即使您的鼠标位于其他元素上,如
MediaElement
等。或者是否存在其他我不考虑的情况?如果您根本不在应用程序上方,则不会。我使用capture是因为用户从应用程序中拖出了一个选项。啊,好的,你说得对。在这种情况下,我认为您也可以使用
MouseEnter
/
MouseLeave
事件作为
Window
窗口,但是如果没有捕获,您就无法在离开窗口时跟踪鼠标移动,这在某些情况下很重要。是的,也是这样。如果这是一项要求,那么确实需要鼠标捕捉链接和库。我会尝试一下,让你知道,但我不想使用挂钩,除非作为最后手段。我会使用这个开源库。这似乎是第二条路。是的,这是值得的。但是需要注意的是,如果您只想为您的应用程序而不是整个系统挂接,那么应该将使用
WH\u MOUSE\u LL
的行改为
WH\u MOUSE
,并将
WH\u KEYBOARD\u LL
改为
WH\u KEYBOARD
,我记得它们在库中只有几行。