光标在屏幕外时如何获取鼠标移动信息?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (60)

我是一个旧的堆栈溢出用户(大多数开发人员,你知道,地球),但这是我的第一个问题。

我正在尝试使用“空中鼠标”进行游戏(将其指向屏幕),但由于鼠标传感器是陀螺仪,因此屏幕移动存在一些问题,我想通过软件尝试修复。

使用这种陀螺鼠标,当用户将其手臂指向屏幕外时,光标停在屏幕限制处,这没有问题。但是,当他将手臂向后移动时,无论距屏幕的距离如何,光标都会立即在屏幕上移动。这导致空中鼠标实际位置和光标之间的巨大差异。

这可以通过简单控制像素数量和方向,离屏移动以及一些事件处理来解决。如果我可以总结在-X,+ X,-Y和+ Y中行进的“屏幕外”像素的数量,则可以防止/取消鼠标移动事件 - 或者将光标设置为其在边缘的先前位置屏幕 - 直到控件告诉我物理鼠标指向屏幕。就在这时,我允许光标自由移动。

我知道这不是那么有用,但这是一个有趣的问题,看到这个工作会很有趣!

目前,基于这个伟大的项目[ https://www.codeproject.com/Articles/28064/Global-Mouse-and-Keyboard-Library],我只能说明鼠标何时离屏,但无法控制多远它正在朝着哪个方向移动,正确地实现我正在努力的方向。在我看来,这种信息对我目前的Windows知识来说太低了。

因此,要明确:我怎样才能在C#中接受其他语言,但我必须学到很多东西;),当光标处于极限时,获得任何类型的“增量位置”信息或移动方向屏幕?

尽管如此,我对使用不同类型的控制器并不感兴趣,以及“你不应该这样做”的答案。我有这个问题需要解决这些问题,让这项工作真的很棒!

提问于
用户回答回答于

获取光标位置然后检测其移动的最简单的解决方案之一,无论光标在哪里使用win32 API user32.dll

这是一个简单的代码,它使用C#Windows窗体应用程序中的计时器每10ms获取一次光标位置,并将其显示为窗口的标题。

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Drawing;

public partial class Form1 : Form
{
    Timer timer = new Timer();

    public Form1()
    {
        InitializeComponent();

        timer.Interval = 10;
        timer.Tick += Timer_Tick;

        timer.Start();
    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        // do here whatever you want to do

        // just for testing...
        GetCursorPos(out Point lpPoint);
        this.Text = lpPoint.X + ", " + lpPoint.Y;
    }

    [DllImport("user32.dll")]
    public static extern bool GetCursorPos(out Point p);
}

所属标签

可能回答问题的人

  • 不吃貓的鱼oo

    5 粉丝466 提问6 回答
  • Richel

    8 粉丝0 提问4 回答
  • 人生的旅途

    10 粉丝484 提问3 回答
  • 云服务小能手

    0 粉丝0 提问2 回答

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励