通过 WinAPI 提取光标大小 (Windows 10)

2024-02-08

我需要提取光标图像以便在我的 swing 应用程序(Java)中使用它。

首先,我发现类似的问题 https://stackoverflow.com/questions/739870/extract-cursor-image-in-java/740528,修改了答案中的代码片段,并得到了这个沙盒应用程序 https://pastebin.com/uDvH3HL7.

很快,它通过 JNA 和 WinAPI 获取光标图像,然后在 JFrame 上显示该图像并为此框架设置自定义光标。

在大多数情况下,此代码可以正常工作并且适合我的任务。但后来我发现当用户更改光标的大小或颜色时(Windows 10 功能 https://pureinfotech.com/change-mouse-pointer-size-windows-10/),程序会提取一个无效的光标图像,该图像在颜色和大小上都不与原始光标匹配。

当用户有标准光标时:

当用户有例如粉色光标比标准光标大:

在这种情况之后,我决定做同样的沙箱应用程序,但通过 C++ 和 WinAPI。我为此使用了答案question https://stackoverflow.com/questions/10469538/winapi-get-mouse-cursor-icon,但仅解决了颜色问题。

我认为主要的瓶颈是GetSystemMetrics函数返回默认的光标大小(32x32),并且在光标大小改变后它不会改变。我找到了一些证明here https://stackoverflow.com/questions/1699666/how-do-i-know-the-size-of-a-hcursor-object,但我不确定。

所以我的问题是:

如何获取光标的实际大小?

预先非常感谢!


我认为主要瓶颈是 GetSystemMetrics 函数返回 默认光标大小 (32x32),并且在光标移动后不会改变 尺寸变化。

当用户通过设置更改光标大小时。系统设置将将此更改更新为注册表值CursorBaseSize under HKEY_CURRENT_USER\Control Panel\Cursors.

当发生变化时,您可以通过以下方式收到通知WM_SETTINGCHANGE https://learn.microsoft.com/en-us/windows/win32/winmsg/wm-settingchange?redirectedfrom=MSDN or SetWinEventHook https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwineventhook (EVENT_OBJECT_SHOW https://learn.microsoft.com/en-us/windows/win32/winauto/event-constants, OBJID_CURSOR https://learn.microsoft.com/en-us/windows/win32/winauto/object-identifiers).

然后阅读CursorBaseSize注册值以获取新大小并使用获取其他信息GetIconInfoEx https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-geticoninfoexw创建具有指定大小的光标。 (CreateCursor https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-createcursor)

更多参考:当光标发生变化时如何收到通知? https://devblogs.microsoft.com/oldnewthing/20151116-00/?p=92091

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 WinAPI 提取光标大小 (Windows 10) 的相关文章

  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • Windows 上的 Nifi 命令

    在我当前的项目中 我一直在Windows操作系统上使用apache nifi 我已经提取了nifi 0 7 0 bin zip文件输入C 现在 当我跑步时 bin run nifi bat as 管理员我在命令行上看到以下消息 但无法运行
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • Java - 不要用 bufferedwriter 覆盖

    我有一个程序可以将人员添加到数组列表中 我想做的是将这些人也添加到文本文件中 但程序会覆盖第一行 因此这些人会被删除 如何告诉编译器在下一个空闲行写入 import java io import java util import javax
  • 检测到严重错误 c0000374 - C++ dll 将已分配内存的指针返回到 C#

    我有一个 c dll 它为我的主 c 应用程序提供一些功能 在这里 我尝试读取一个文件 将其加载到内存 然后返回一些信息 例如加载数据的指针和内存块的计数到 c Dll 成功将文件读取到内存 但在返回主应用程序时 程序由于堆损坏而崩溃 检测
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • 如何测试 spring-security-oauth2 资源服务器安全性?

    随着 Spring Security 4 的发布改进了对测试的支持 http docs spring io spring security site docs 4 0 x reference htmlsingle test我想更新我当前的
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class

随机推荐

  • 在 R 中高效计算 3d 数组的行和

    考虑数组a gt a lt array c 1 9 1 9 c 3 3 2 gt a 1 1 2 3 1 1 4 7 2 2 5 8 3 3 6 9 2 1 2 3 1 1 4 7 2 2 5 8 3 3 6 9 我们如何有效地计算由第三维
  • JS 传单:如何将 (Geo-)json ID 传递给单击事件?

    我的 django Web 应用程序应该执行以下操作 将 Geojson 对象传递到视图 使用传单映射点 并在用户单击点标记时显示一些附加信息 我对 js 不太熟悉 所以我陷入了将正确类型的数据绑定到click事件 这是一个示例 geojs
  • PHP 与 Pylons 的基准测试

    我想对 PHP 与 Pylons 进行基准测试 我希望两者的比较尽可能均匀 所以这就是我的想法 PHP 5 1 6 with APC 使用 smarty 模板连接到 MySQL 数据库 Python 2 6 1 使用带有 mako 模板的
  • 有没有办法在 GHCI 中查看模块中的函数列表?

    我发现在 Python 或 Common Lisp 中 您可以在运行时列出库的内容 这很方便 Haskell 是否有同样的东西 特别是在 GHCI 提示符下 GHCi 有一个 browse列出模块内容的命令 Prelude gt brows
  • 如何使用 %edit magic 打印我定义的对象的源代码

    Ipython 0 13 1 可以从 python 库打印对象的源 例如 os path abspath 但我无法打印我在 ipython 中通过 ed magic 定义的任何对象的源代码 我做错了什么吗 例如 我通过 ed 魔法定义一个类
  • 如何使用 UI 自动化(和/或 White)从外部应用程序获取控件的 DataContext

    我在用着White http white codeplex com 驱动 WPF 应用程序的 UI 到目前为止效果良好 然而 我现在需要深入研究被测应用程序的内部状态以检查某些条件 具体来说 我有一个 DataGrid 来自WPF工具包 h
  • TypeScript - 模块在运行时未定义

    我不明白我做错了什么 我在 VS2012 中创建了一个 TypeScript 项目 并在名为 Physics 的子目录中创建了一个名为 Vector ts 的文件 Module module Physics Class export cla
  • 如何在 SQL 表中查询数字 1 - 69 的所有可能的 5 个数字组合的逻辑有问题

    编辑 只是为了澄清一下 结果的顺序仅重要于 1 2 3 4 5 和 5 4 3 2 1 应该是相同的记录 所以我正在寻找不同的组合 我希望建立一个 SQL 数据库 其中包含数字 1 69 的所有可能的 5 个数字组合 其中相同的数字不能在单
  • 如何在android中对VideoView进行放大/缩小?

    我正在使用 VideoView 并从资源中运行视频 我想知道 有什么方法可以对正在运行的视频执行放大 缩小功能吗 好的 我遇到了这个问题 并通过删除 VideoView 并将其替换为纹理视图 http developer android c
  • 有没有 javascript LaTeX 方程渲染器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个纯粹的客户端 JavaScript 库 它将乳胶方程呈现为 HTML CSS 我讨厌我看
  • 如何实现检测一个视图被拖动到另一个视图上?

    我想要一个可拖动视图 同时能够不断监视到 目标 视图的距离 并检测何时将可拖动视图拖动到目标视图上 我的想法是得到Rect s两种视图并使用intersect 检查它们是否接触 然而 我的实现工作并不顺利 有时它会检测到错误位置的重叠或未检
  • 将目录添加到 PyCharm 中的 Python 路径?

    我希望能够使用paraview simplePyCharm 中的库 我的电脑中已经安装了 paraview 该软件包无法安装pip据我所知 没有 whl 文件 网站docs https www paraview org ParaView D
  • PHP:使用 php 裁剪时出现黑色图像

    我设置了一个上传 jpeg 的脚本 然后将其裁剪为缩略图 但有些用户遇到黑色图像 老实说我不知道 他们上传的是什么 也许是压缩格式与 php 库不兼容的 jpeg 这是我的简单代码 当我尝试使用我的照片时一切正常 所以我无法理解为什么有些用
  • 如何在不同主机上向 eureka-server 注册 eureka-clients。弹簧启动

    我正在本地主机上运行我的尤里卡服务器 我能够在本地主机上注册所有其他正在运行的服务 并且一切都按预期进行 现在我想注册一个在Linux机器上运行的服务 我的属性看起来像这样 spring application name myService
  • Babel 6 更改了默认导出方式

    之前 babel 会添加以下行module exports exports default 它不再这样做了 这意味着在我能做之前 var foo require foo use foo 现在我必须这样做 var foo require fo
  • 在 Gremlin 中合并地图

    我正在尝试编写一个满足响应对象中两个要求的查询 必须包括all顶点的属性 无需在查询中指定各个字段 必须将结果展平到对象的同一水平上 作为单独的查询 我可以这样做 1 valueMap query g V 1 valueMap by unf
  • AVX __m256i 有符号 32 位元素的整数除法

    我试图在 AVX 机器上进行 SIMD 划分并收到编译错误 这是我的代码 m256i help int arr 8 int arr2 8 help mm256 load si256 m256i arr m256i temp temp mm2
  • 在javascript中将JSONArray转换为String以发送到java

    我正在使用一个使用phonegap 的Android 应用程序 java 调用一些显示网页的 HTML 而 HTML 使用 javascript 来实现功能 现在 在 javascript 中 我使用 HTML 中的参数进行 JSON 调用
  • servlet 应该执行多少个操作?

    我是 Web 开发新手 只是想知道 java servlet 的最佳实践 每个 servlet 是否应该只执行一个操作 即用于登录的 servlet 用于注册的 servlet 等 还是应该通过传递不同的参数来告诉 servlet 执行哪个
  • 通过 WinAPI 提取光标大小 (Windows 10)

    我需要提取光标图像以便在我的 swing 应用程序 Java 中使用它 首先 我发现类似的问题 https stackoverflow com questions 739870 extract cursor image in java 74