我正在尝试将Windows 10(版本1703)中的光标更改为自定义的光标(以脚本激活时的某些事件为条件),大于默认的32 x 32大小。基于我的Autohotkey脚本的MWE如下:
ImagePath = %A_ScriptDir%\foo.cur
Cursor_ID := 32512 ; Standard arrow
Cursor_Size := 128
^0::
SetSystemCursor( ImagePath, Cursor_ID, Cursor_Size, Cursor_Size )
return
SetSystemCursor( path, id, sizeX, sizeY )
{
Cursor := DllCall( "LoadImage",
UInt,0, Str,path, UInt,0x2, Int,sizeX, Int,sizeY, UInt,0x00000010, Ptr)
DllCall( "SetSystemCursor", Ptr,Cursor, Int,id )
}
(我的代码基于https://autohotkey.com/board/topic/32608-changing-the-system-cursor/上的代码。)
据我所知documentation of LoadImage,函数SetSystemCursor(...)
应该加载尺寸为(sizeX, sizeY)
的图片,当这些参数不为0时(因为标记LR_DEFAULTSIZE = 0x00000040
没有设置),但我得到以下行为:无论我设置什么尺寸,图像缩放到(sizeX, sizeY)
,然后然后向下/升级到(32,32)。这一点最明显的是设置,比如说Cursor_Size := 2
,然后我得到一张2 x图像的放大版本。
经过一些搜索后,我发现这两个信息都表明 应该工作,并且{{1}指示游标的大小总是 }
和getSystemMetrics(SM_CXCURSOR)
:The biggest size of Windows Cursor(另见GetSystemMetrics)。
我尝试过的其他测试/想法:
我检查了与返回的句柄对应的图像的尺寸
按getSystemMetrics(SM_CYCURSOR)
,它似乎是LoadImage
,就像它应该的那样,
因此,在执行(sizeX, sizeY)
时,最有可能缩放到32。
我想看看特定于应用程序的游标是否可以绕过 显然32乘32限制,所以使用Resource Hacker,我替换了其中之一 Paint中的资源。它以相同的方式缩小到32号。
设置返回的值
SetSystemCursor
和getSystemMetrics(SM_CXCURSOR)
可能是一个选项,如果这些确实限制游标大小,但我
找不到合适的功能。我检查了
SystemParametersInfo,但唯一的远程相关选项
我发现是getSystemMetrics(SM_CYCURSOR)
,只是重新加载游标
注册表中。
有可能更改注册表值,但不会 是我的首选解决方案,因为它很可能需要重新启动 生效。此外,我还没能找到相关的密钥。
因此我的问题如下:
有没有办法在Windows 10中添加任意大小的图像作为光标,最好不需要重新启动计算机?如果是这样,怎么样? SPI_SETCURSORS
和SM_CXCURSOR
是否绝对限制光标的大小?如果他们这样做,这些价值会以某种方式改变吗?
编辑:
有人指出,是的,the documentation of GetSystemMetrics状态"系统无法创建其他大小的游标"比SM_CYCURSOR
和SM_CXCURSOR
,但同时在我链接的其他一些网页上,人们似乎声称能够创建任意大小的游标。因此,我要求确认/澄清此事。
除此之外,关于改变这些价值观或存在任何其他可能的解决方法的问题对我来说仍然很重要。