我试图将Windows游标(默认为Windows自定义方案)更改为我的自定义游标(它命名为Cut the rope):
有没有想法改变所有游标(箭头,忙碌,帮助选择,链接选择,......)到我的剪切绳子?
如果要更改默认的鼠标光标主题:
您可以在注册表中更改它:
有三个主要的注册表项起作用。
1a) 下面的值是不同类型的游标
1b) 方案源指定当前使用的游标方案的类型。
不同的值是:
“0” – Windows 默认
“1” – 用户方案
“2” – 系统方案
注册表项HKEY_CURRENT_USER\Control Panel\Cursors包含用户定义的游标方案(即 Scheme Source = 1)
注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Schemes包含系统光标方案(即 Scheme Source = 2)
如果您已经将路径更改为 HKCU\Control Panel\Cursors 中的一种光标类型并意识到它没有做任何事情。你是对的,仅仅更新一个键——例如 HKCU\Control Panel\Cursors\Arrow——是不够的。您必须告诉 Windows 加载新光标。
这就是SystemParametersInfo调用的地方。要尝试这个,让我们继续将 HKCU\Control Panel\Cursors\Arrow 更改为 C:\WINDOWS\Cursors\appstar3.ani(假设您有这个图标),然后调用系统参数信息
在 AutoHotKey 脚本中:
SPI_SETCURSORS := 0x57
result := DllCall("SystemParametersInfo", "UInt", SPI_SETCURSORS, "UInt", 0, "UInt", 0, "UInt", '0')
MsgBox Error Level: %ErrorLevel% `nLast error: %A_LastError%`nresult: %result%
Run Code Online (Sandbox Code Playgroud)
翻译成 C#:
[DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, uint pvParam, uint fWinIni);
const int SPI_SETCURSORS = 0x0057;
const int SPIF_UPDATEINIFILE = 0x01;
const int SPIF_SENDCHANGE = 0x02;
Run Code Online (Sandbox Code Playgroud)
调用它:
SystemParametersInfo(SPI_SETCURSORS, 0, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
Run Code Online (Sandbox Code Playgroud)
更改为默认 Windows 光标
现在是棘手的部分。如果您查看 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Schemes,您会注意到“Windows 默认”被定义为“,,,,,,,,,,,,,” 或者换句话说没有指针到实际的游标!
现在做什么?别担心。您所要做的就是将不同的游标类型设置为空字符串,然后像往常一样调用 SystemParametersInfo。事实上,您可以在任何方案中将任何游标类型设置为空字符串,Windows 将默认为它在“Windows 默认”方案中的等效项。
参考:
https://thebitguru.com/articles/programmatically-changed-windows-mouse-cursors/3