草庐IT

java - Windows 光标大小大于可用的最大值

coder 2024-06-04 原文

我正在使用一个应用程序,其中我必须开发的选项之一是更改 Windows 10 光标大小。就我而言,更改整个窗口的光标大小很重要,而不仅仅是针对特定的 Java 应用程序窗口。目前,我可以通过修改 HKEY_CURRENT_USER → 控制面板 → Cursors 目录下的 Windows 注册表属性来更改特定游标类型的大小。

不幸的是,我需要将光标大小设置为大于 32x32px。
在某处我找到了一个解决方案,可以通过位图覆盖现有的鼠标光标并只跟随光标的位置,但我不知道如何开始实现。
我在互联网上搜索,我发现一些应用程序允许用户修改整个 Windows 10 的光标大小——例如,这是 CursorFX。

您知道如何以编程方式增加光标大小吗?

最佳答案

您可以使用 SetSystemCursor API 设置您想要的任何大小的光标.您不仅限于 SM_CXCURSOR/SM_CYCURSOR指标(参见 GetSystemMetrics function )—它们只是告诉您系统的默认光标大小,通常为 32×32(或在高 DPI 系统上为 48×48)。我知道这可以追溯到 Windows XP;我很确定它比那更有效。

关键在于如何加载游标资源。您可能已经知道,您需要一个 HCURSOR要传递给 SetSystemCursor 的对象.这是一个句柄到光标,在 Windows API 说。加载游标的明显方法是调用 LoadCursor API function ,但这是一个非常古老的函数,在 16 位 Windows 中引入,并且仅限于加载大小为 SM_CXCURSOR 的游标。 × SM_CYCURSOR .所以你不想要那个†;您要调用 LoadImage ,正如文档所示,这是现代替换功能。它需要一个枚举整数参数,指示要加载的图像类型:IMAGE_BITMAP (0), IMAGE_ICON (1), IMAGE_CURSOR (2) 或 IMAGE_ENHMETAFILE (3).显然,IMAGE_CURSOR是你想在这里使用的。

您可以从嵌入到应用程序二进制文件中的游标资源(作为 Win32 资源)加载,也可以从磁盘中的 *.CUR/*.ANI 文件加载。要执行后者,请通过 LR_LOADFROMFILE标志到 LoadImage功能。

我不知道 Java,所以我无法使用任何需要的语法将其转换为 Java,以进行本地 Windows API 调用,但这里是 C 中的代码:

 // Load from a CUR file, at C:\LargeCursor.cur, with a size of 64x64 pixels
HCURSOR hCursor = (HCURSOR)LoadImage(NULL,
                                     "C:\\LargeCursor.cur"),
                                     IMAGE_CURSOR,
                                     64, 64,
                                     LR_DEFAULTCOLOR | LR_LOADFROMFILE);
assert(hCursor != NULL);  // verify that load was successful
BOOL result = SetSystemCursor(hCursor, OCR_NORMAL);
assert(result != FALSE);  // verify that the change was successful

// Load from an embedded resource, IDC_CURSOR, with a size of 64x64 pixels
HCURSOR hCursor = (HCURSOR)LoadImage(GetModuleHandle(NULL),
                                     IDC_CURSOR),
                                     IMAGE_CURSOR,
                                     64, 64,
                                     LR_DEFAULTCOLOR);
assert(hCursor != NULL);  // verify that load was successful
BOOL result = SetSystemCursor(hCursor, OCR_NORMAL);
assert(result != FALSE);  // verify that the change was successful

请注意 SetSystemCursor需要 OCR_* 之一常量来标识要更改的系统游标类型。当您包含 Windows.h 时,默认情况下不包含这些;你必须定义 OEMRESOURCE之前包括 Windows.h .不过,我假设对于 Java,您只是将常量自己定义为枚举值。在这种情况下,它们都可以在 the MSDN documentation for SetSystemCursor 中找到。 .例如,OCR_NORMAL32512 .

但是请注意,我们在这里所做的是加载所需大小的新光标(即图像),然后进行设置。这很好用。您不能轻易做的只是扩展现有光标字形的大小。为此,您必须检索当前光标字形,将其绘制到位图上,将该位图缩放到所需大小,将该位图转换为 HCURSOR ,然后设置 HCURSOR使用 SetSystemCursor .而且,自然而然地,问题在于 Windows 光标字形只是位图,因此它们不是无限可扩展的。您将很快开始失去分辨率,因此不建议这样做。如果您需要大尺寸光标,则需要提供您自己的图像。

说到“CursorFX”,我相信你会想到 AniFX(作者是 IcoFX 的作者 Attila Kovrig)。这是一个光标图像编辑器,是创建您需要的 *.CUR/*.ANI 文件的好方法。但是您可以同样轻松地使用其他一些专为创建游标而设计的软件;有无数可供选择。

__
† 并不是说​​您想要 SetSystemCursor 的功能无论如何,因为SetSystemCursor通过调用 DestroyCursor 销毁指定的游标.你需要做 LoadCursor然后 CopyCursor调用前SetSystemCursor .这在 SetSystemCursor 的文档中都有详细说明。 ,但正如我所说,您不必再担心这个,因为您只需使用 LoadImage (没有 LR_SHARED 标志)。

关于java - Windows 光标大小大于可用的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46014692/

有关java - Windows 光标大小大于可用的最大值的更多相关文章

  1. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  2. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  3. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  4. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  5. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  6. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  7. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  8. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  9. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  10. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

随机推荐