如何在Windows 11中通过PowerShell脚本无需重启更改鼠标光标?
如何在Windows 11中通过PowerShell脚本无需重启更改鼠标光标?
我完全懂你的困扰——改了注册表光标却没变化,其实是因为光修改注册表项还不够,必须通知Windows系统刷新光标设置才行。下面给你整合好完整的脚本,能跟着你的昼夜主题参数自动切换鼠标光标方案,而且不用重启系统。
核心思路
Windows的光标方案设置存在HKEY_CURRENT_USER\Control Panel\Cursors路径下,我们主要修改两个关键项:
Scheme Name: 指定要使用的光标方案名称(比如"Windows 默认"对应浅色,"Windows Black"对应深色)Scheme Source: 设为0,确保系统识别我们指定的方案
修改注册表后,需要调用Windows API SystemParametersInfo发送刷新信号,让系统立刻应用新的光标设置。
完整PowerShell脚本
param ( [Parameter(Mandatory=$true)][int]$daySegment2, # 0 = Day, 1 = Night [Parameter(Mandatory=$true)][int]$daySegment4, # -1 = N/A, 0 = Sunrise, 1 = Day, 2 = Sunset, 3 = Night [Parameter(Mandatory=$true)][bool]$nightMode, # True if night mode is enabled [Parameter(Mandatory=$false)][string]$imagePath # Path to current wallpaper image ) # 定义光标方案名称,要和系统里的名称完全匹配 $lightCursorScheme = "Windows 默认" $darkCursorScheme = "Windows Black" # 根据主题参数确定要使用的光标方案 $targetScheme = if ($nightMode -or $daySegment2 -eq 1) { $darkCursorScheme } else { $lightCursorScheme } # 修改注册表中的光标方案设置 Set-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "Scheme Name" -Value $targetScheme Set-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "Scheme Source" -Value 0 # 调用Windows API刷新光标设置,无需重启系统 Add-Type @" using System; using System.Runtime.InteropServices; public class CursorRefresh { [DllImport("user32.dll", SetLastError = true)] public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, IntPtr pvParam, uint fWinIni); } "@ # SPI_SETCURSORS = 0x0057, SPIF_UPDATEINIFILE = 0x01, SPIF_SENDCHANGE = 0x02 [CursorRefresh]::SystemParametersInfo(0x0057, 0, [IntPtr]::Zero, 0x01 -bor 0x02) Write-Host "已成功切换光标方案为: $targetScheme"
关键说明
- 方案名称匹配:要确保
$lightCursorScheme和$darkCursorScheme的名称和系统里的完全一致——你可以打开「设置>蓝牙和设备>鼠标>额外鼠标设置>指针」面板,查看准确的方案名称,避免拼写错误导致切换失败。 - API调用的作用:
SystemParametersInfo函数会直接通知Windows系统重新加载光标配置,这就是之前只改注册表没生效的核心原因,加上这一步后设置会立刻生效,不用重启或注销。 - 参数适配:脚本已经完全结合了你原来的
nightMode和daySegment2参数逻辑,会自动根据当前主题状态切换对应的光标方案。
备注:内容来源于stack exchange,提问作者fatFeather




