如何 GetMousePosition 在屏幕上的任何位置,在窗口(或任何视觉)边界之外

Posted

技术标签:

【中文标题】如何 GetMousePosition 在屏幕上的任何位置,在窗口(或任何视觉)边界之外【英文标题】:how to GetMousePosition anywhere on the screen, outside the bounds of window (or any Visual) 【发布时间】:2010-11-26 18:12:04 【问题描述】:

我想在屏幕上的任意位置跟踪鼠标光标的位置,在屏幕坐标中。那么即使鼠标光标移动到了窗口边界之外,有没有办法获取鼠标光标的位置呢?

我正在做的是试图让一个弹出窗口跟随鼠标光标,即使它移出主窗口。

这是我尝试过(但没有奏效)的代码 sn-p:

        private void OnLoaded(object sender, RoutedEventArgs e)
               
        bool gotcapture = this.CaptureMouse();
        Mouse.AddLostMouseCaptureHandler(this, this.OnMouseLostCapture);
    
            Point mouse_position_relative = Mouse.GetPosition(this);
        Point mouse_screen_position = popup.PointToScreen(mouse_position_relative);
        private void OnMouseLostCapture(object sender, MouseEventArgs e)
    
        bool gotcapture = this.CaptureMouse();
        this.textblock.Text = "lost capture.";
    

【问题讨论】:

【参考方案1】:

您的问题到底是什么? 等待! 一种相对于屏幕定位弹出窗口的方法。见PlacementMode.AbsolutePoint 这显示了飞来飞去的小开心脸:

private Popup _popup;

public Window1()

    InitializeComponent();

    this.Loaded += OnLoaded;


private void OnLoaded(object sender, RoutedEventArgs e)

    _popup = new Popup
              
                  Child = new TextBlock Text = "=))", Background = Brushes.White,
                  Placement = PlacementMode.AbsolutePoint,
                  StaysOpen = true,
                  IsOpen = true
              ;
    MouseMove += MouseMoveMethod;
    CaptureMouse();


private void MouseMoveMethod(object sender, MouseEventArgs e)

    var relativePosition = e.GetPosition(this);
    var point= PointToScreen(relativePosition);
    _popup.HorizontalOffset = point.X;
    _popup.VerticalOffset = point.Y;

【讨论】:

【参考方案2】:

没关系,我意识到没有办法相对于屏幕定位 Popup,只能相对于包含它的 Visual。

【讨论】:

【参考方案3】:

有多种方法可以在 WPF Window 之外获取鼠标位置的屏幕坐标。不幸的是,您需要添加引用才能使用它们中的任何一个,但这可能的。您可以在@FredrikHedblad 对How do I get the current mouse screen coordinates in WPF? 问题的回答中找到它们的示例。巧合的是,这个问题在你问这个问题的前几天就得到了回答,并在 21 分钟内放弃了。

【讨论】:

以上是关于如何 GetMousePosition 在屏幕上的任何位置,在窗口(或任何视觉)边界之外的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中搜索屏幕上的图像?

如何在 Qt 中获取鼠标在屏幕上的位置?

(引导 3)如何让小屏幕上的导航栏与大屏幕上的导航栏一样

如何在屏幕上的特定位置设置视图?

如何创建一个出现在所有屏幕上的小吃店?

如何创建显示在所有屏幕上的小吃店?