Hi there! if you recently updated Build26220.9223 or similar insider update, you may find your cursors had been like rolled back. It is informed that Microsoft is trying to fix this.
Windows 11 鼠标指针方案无法通过设置/控制面板正常应用,会错误显示为经典/Windows XP 样式光标
问题描述
Windows 11 出现鼠标指针方案异常。
无论在“设置”还是传统“控制面板 → 鼠标 → 指针”中选择:
Windows 系统默认指针方案
第三方鼠标指针方案
已正确安装的 .cur 指针文件
点击“应用”后,实际显示的鼠标指针都会变成类似 Windows XP / Windows 经典样式的旧版箭头,而不是所选择的指针。
该问题并非第三方鼠标指针文件损坏,因为 Windows 自带指针和多个第三方指针方案均出现相同行为。
复现步骤
打开“控制面板 → 鼠标 → 指针”。
选择任意指针方案,例如第三方 STMC 指针方案。
点击“应用”。
注册表中会正确保存所选择的方案和 .cur 文件路径。
但屏幕上实际显示的指针会立即变成 Windows XP / Windows 经典样式指针。
在 Windows“设置”应用中修改鼠标指针也会发生同样的问题。
实际结果
例如选择:
STMC 2-1 45-Degree
注册表中的配置为:
HKEY_CURRENT_USER\Control Panel\Cursors
(Default) REG_SZ STMC 2-1 45-Degree
Arrow REG_EXPAND_SZ %SYSTEMROOT%\Cursors\STMC\STMC 45-Degree 01 Pointer.cur
CursorBaseSize REG_DWORD 0x20
Scheme Source REG_DWORD 0x1
对应文件也确实存在:
C:\WINDOWS\Cursors\STMC\STMC 45-Degree 01 Pointer.cur
但实际显示的仍然是经典/Windows XP 风格箭头。
进一步测试
已经通过 Win32 API 进行了测试。
直接使用:
LoadCursorFromFile
和:
SetSystemCursor
加载同一个 .cur 文件时,指针可以立即正确显示。
例如直接加载 Windows 自带:
C:\Windows\Cursors\aero_arrow.cur
可以正常显示 Windows 11/Aero 指针。
直接加载:
C:\WINDOWS\Cursors\STMC\STMC 45-Degree 01 Pointer.cur
也可以正常显示第三方指针。
调用:
SystemParametersInfo(SPI_SETCURSORS)
重新加载系统指针同样可以正常工作。
但是,只要再次通过 Windows“设置”或“控制面板 → 鼠标 → 指针”点击“应用”,实际显示的指针就会再次变成经典/Windows XP 样式。
因此:
.cur 文件本身可以正常加载;
Windows 可以正常显示自定义指针;
注册表中的指针路径正确;
CursorBaseSize 当前为正常的 32(0x20);
Win32 SetSystemCursor 可以正常工作;
SPI_SETCURSORS 可以正常工作;
异常似乎发生在 Windows 设置/控制面板应用鼠标指针方案的过程中。
其他信息
未主动开启特殊的辅助功能鼠标指针模式。
此前曾发现:
HKEY_CURRENT_USER\Control Panel\Cursors
CursorBaseSize = 0
手动恢复为:
CursorBaseSize = 32
后问题仍然存在。
这可能说明 Windows 的鼠标指针配置状态曾出现异常,但 CursorBaseSize 并不是问题的唯一原因。
期望结果
在“设置”或“控制面板 → 鼠标 → 指针”选择某个指针方案并点击“应用”后,Windows 应当实际显示该方案指定的 .cur/.ani 文件,而不是回退到 Windows 经典/XP 样式指针。
希望 Microsoft 检查近期 Windows 11 更新中与 mouse cursor scheme、cursor persistence、Control Panel/Settings pointer apply 相关的回归问题。
Windows 11 鼠标指针方案无法通过设置/控制面板正常应用,会错误显示为经典/Windows XP 样式光标
问题描述
Windows 11 出现鼠标指针方案异常。
无论在“设置”还是传统“控制面板 → 鼠标 → 指针”中选择:
Windows 系统默认指针方案
第三方鼠标指针方案
已正确安装的 .cur 指针文件
点击“应用”后,实际显示的鼠标指针都会变成类似 Windows XP / Windows 经典样式的旧版箭头,而不是所选择的指针。
该问题并非第三方鼠标指针文件损坏,因为 Windows 自带指针和多个第三方指针方案均出现相同行为。
复现步骤
打开“控制面板 → 鼠标 → 指针”。
选择任意指针方案,例如第三方 STMC 指针方案。
点击“应用”。
注册表中会正确保存所选择的方案和 .cur 文件路径。
但屏幕上实际显示的指针会立即变成 Windows XP / Windows 经典样式指针。
在 Windows“设置”应用中修改鼠标指针也会发生同样的问题。
实际结果
例如选择:
STMC 2-1 45-Degree
注册表中的配置为:
HKEY_CURRENT_USER\Control Panel\Cursors
(Default) REG_SZ STMC 2-1 45-Degree
Arrow REG_EXPAND_SZ %SYSTEMROOT%\Cursors\STMC\STMC 45-Degree 01 Pointer.cur
CursorBaseSize REG_DWORD 0x20
Scheme Source REG_DWORD 0x1
对应文件也确实存在:
C:\WINDOWS\Cursors\STMC\STMC 45-Degree 01 Pointer.cur
但实际显示的仍然是经典/Windows XP 风格箭头。
进一步测试
已经通过 Win32 API 进行了测试。
直接使用:
LoadCursorFromFile
和:
SetSystemCursor
加载同一个 .cur 文件时,指针可以立即正确显示。
例如直接加载 Windows 自带:
C:\Windows\Cursors\aero_arrow.cur
可以正常显示 Windows 11/Aero 指针。
直接加载:
C:\WINDOWS\Cursors\STMC\STMC 45-Degree 01 Pointer.cur
也可以正常显示第三方指针。
调用:
SystemParametersInfo(SPI_SETCURSORS)
重新加载系统指针同样可以正常工作。
但是,只要再次通过 Windows“设置”或“控制面板 → 鼠标 → 指针”点击“应用”,实际显示的指针就会再次变成经典/Windows XP 样式。
因此:
.cur 文件本身可以正常加载;
Windows 可以正常显示自定义指针;
注册表中的指针路径正确;
CursorBaseSize 当前为正常的 32(0x20);
Win32 SetSystemCursor 可以正常工作;
SPI_SETCURSORS 可以正常工作;
异常似乎发生在 Windows 设置/控制面板应用鼠标指针方案的过程中。
其他信息
未主动开启特殊的辅助功能鼠标指针模式。
此前曾发现:
HKEY_CURRENT_USER\Control Panel\Cursors
CursorBaseSize = 0
手动恢复为:
CursorBaseSize = 32
后问题仍然存在。
这可能说明 Windows 的鼠标指针配置状态曾出现异常,但 CursorBaseSize 并不是问题的唯一原因。
期望结果
在“设置”或“控制面板 → 鼠标 → 指针”选择某个指针方案并点击“应用”后,Windows 应当实际显示该方案指定的 .cur/.ani 文件,而不是回退到 Windows 经典/XP 样式指针。
希望 Microsoft 检查近期 Windows 11 更新中与 mouse cursor scheme、cursor persistence、Control Panel/Settings pointer apply 相关的回归问题。
Windows 商业版 | 面向 IT 专业人士的 Windows 客户端 | 用户体验 | 其他
-
liyqme 0 信誉分
2026-08-28T04:46:09.5366667+00:00 The post seems to be AI generated but the issue exists. I run into the same on 26200.9278: whatever mouse cursor/theme I set in new settings app or the old control panel, it does not work. My regular cursor seems to be locked into
aero_arrow_l.curand also other cursor state does not match my settings.What does not work:
- Set theme in Settings/Customization.
- Select another cursor preset in control panel.
- Switch cursor color white/black/invert in Settings/Accessibility.
- Change cursor size in Settings/Accessibility. It just enlarges the already large cursor.
- Logout/reboot. The large cursor is also used before login.
Finally GPT generated this script seems to be a workaround, although I do not fully understand:
& { # Load Win32 cursor APIs. Add-Type @" using System; using System.Runtime.InteropServices; public static class CursorNative { [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)] public static extern IntPtr LoadCursorFromFile(string lpFileName); [DllImport("user32.dll", SetLastError = true)] public static extern bool SetSystemCursor(IntPtr hcur, uint id); } "@ # Read the currently configured cursor scheme from the registry. $cursorSettings = Get-ItemProperty 'HKCU:\Control Panel\Cursors' # Registry value name -> Win32 OCR_* cursor ID. $cursorMap = [ordered]@{ Arrow = 32512 # OCR_NORMAL IBeam = 32513 # OCR_IBEAM Wait = 32514 # OCR_WAIT Crosshair = 32515 # OCR_CROSS UpArrow = 32516 # OCR_UP SizeNWSE = 32642 # OCR_SIZENWSE SizeNESW = 32643 # OCR_SIZENESW SizeWE = 32644 # OCR_SIZEWE SizeNS = 32645 # OCR_SIZENS SizeAll = 32646 # OCR_SIZEALL No = 32648 # OCR_NO Hand = 32649 # OCR_HAND AppStarting = 32650 # OCR_APPSTARTING } foreach ($entry in $cursorMap.GetEnumerator()) { $role = $entry.Key $ocr = [uint32]$entry.Value # Get the .cur/.ani path configured for this cursor role. $path = $cursorSettings.$role # Some default roles, such as IBeam or Crosshair, may intentionally # have an empty registry value and use a built-in Windows resource. if ([string]::IsNullOrWhiteSpace($path)) { Write-Host "[SKIP] $role - no custom cursor file configured" continue } # Expand values such as: # %SystemRoot%\cursors\aero_arrow.cur $path = [Environment]::ExpandEnvironmentVariables($path) if (-not (Test-Path -LiteralPath $path)) { Write-Warning "[FAIL] $role - file not found: $path" continue } # Load the cursor directly from disk, bypassing the Windows # cursor-scheme loader that appears to be selecting the wrong # large cursor variant. $cursorHandle = [CursorNative]::LoadCursorFromFile($path) if ($cursorHandle -eq [IntPtr]::Zero) { $win32Error = [Runtime.InteropServices.Marshal]::GetLastWin32Error() $message = [ComponentModel.Win32Exception]::new($win32Error).Message Write-Warning "[FAIL] $role - LoadCursorFromFile: $win32Error ($message)" continue } # Replace the corresponding system cursor for the current session. $result = [CursorNative]::SetSystemCursor( $cursorHandle, $ocr ) if (-not $result) { $win32Error = [Runtime.InteropServices.Marshal]::GetLastWin32Error() $message = [ComponentModel.Win32Exception]::new($win32Error).Message Write-Warning "[FAIL] $role - SetSystemCursor: $win32Error ($message)" continue } Write-Host "[ OK ] $role -> $path" } }