蓗乐 2022-07-04 23:51 采纳率: 66.7%
浏览 17

java 如何判断windows中鼠标是处于指针还是光标状态

我找了一圈都没找到什么方法或命令可以判断鼠标当前是处于光标状态还是处于指针状态,我尝试过截图法,但是很可惜图片上边没有鼠标的截图,不知道还有什么方法。

网上都说的是关于JFrame里边的光标,但不是我想要的,我想要的是鼠标在windows屏幕任意位置。
有知道的麻烦留个言,感谢!

  • 写回答

2条回答 默认 最新

  • 五一编程 2022-07-05 09:22
    关注

    Java不直接支持指针,因此LWJGL使用缓冲区作为变通方法.这些只是包装一个可以通过对象上的方法读取和写入的内存地址.这允许您将缓冲区传递给将值写入其中的函数,以便您可以读取这些值.

    这里的关键点是你实际上必须事先创建一个缓冲区来存储值.

    public static double getCursorPosX(long windowID) {

    DoubleBuffer posX = BufferUtils.createDoubleBuffer(1);

    glfwGetCursorPos(windowID, posX, null);

    return posX.get(0);

    }

    BufferUtils.createDoubleBuffer(length)是一个创建缓冲区的实用程序函数.不同的基元有不同的缓冲区,如int,long,char,float,double等.在这种情况下,我们需要一个可以存储双精度的缓冲区.我们传递给方法的数字(1)是缓冲区应该能够存储的值的数量.我们可以使用更大的缓冲区来存储多个值,就像在数组中一样,但在这里我们只需要一个值.

    get(index)方法返回给定索引处的值.我们只想读取第一个值,因此我们指定0.您还可以使用put(index,value)将值存储在缓冲区中.

    注意:如果要同时获取x和y值,可能会尝试执行以下操作:

    DoubleBuffer coords = BufferUtils.createDoubleBuffer(2);

    glfwGetCursorPos(windowID, coords, coords);

    double x = coords.get(0);

    double y = coords.get(1);

    但是,这不会按预期工作:它会将y值写入索引0并在索引1处留下垃圾(读取:随机)值.如果要获取两个坐标,则必须为每个坐标创建一个单独的缓冲区.

    DoubleBuffer xBuffer = BufferUtils.createDoubleBuffer(1);

    DoubleBuffer yBuffer = BufferUtils.createDoubleBuffer(1);

    glfwGetCursorPos(windowID, xBuffer, yBuffer);

    double x = xBuffer.get(0);

    double y = yBuffer.get(0);

    评论

报告相同问题?

问题事件

  • 创建了问题 7月4日

悬赏问题

  • ¥15 关于pycharm, Callable[[str],bool]作为方法参数使用时, lambda 类型不提示问题
  • ¥15 寻找了解qq家园纵横四海的程序猿。
  • ¥15 optisystem
  • ¥15 VB.NET画图时的撤销编程
  • ¥15 C# webservice 参数特殊字符处理
  • ¥15 关于控制时间更新的一个操作
  • ¥15 JAVA中使用poi创建word文件,实现页面边框环绕页眉
  • ¥15 matlibplot绘图图形切线问题
  • ¥15 flink 深度优先搜索
  • ¥15 python for everybody 使用Beautifulsoup构建soup对象的时候疯狂报错