如何在 Windows 11 上使用 powershell 脚本更改鼠标光标而无需重新启动?

如何在 Windows 11 上使用 powershell 脚本更改鼠标光标而无需重新启动?

我在尝试使用 Windows 11 上的 PowerShell 脚本更改鼠标光标时遇到了一些困难。 我有一个名为 WDD 脚本的应用程序它具有 PowerShell 脚本的功能,具体取决于一天中的时间/深色或浅色系统操作系统主题。

我很难编写一个使用 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
)

$NightValue = If ($nightMode) {1} Else {$daySegment2}
if ( $NightValue -eq 0)
{
    //change mouse cursor to light
}
else
{
    //change mouse cursor to dark
}

我已经看到很多解决这个问题的应用程序,比如自动暗模式,但没有人分享他们是如何做到的。我正在尝试更改鼠标方案,如下图所示: 灯光模式

以及黑暗模式下的 Windows 黑色方案。我尝试将这里的每个注册表都更改为黑暗模式,设置已更新,但光标本身没有更新。

HKEY_CURRENT_USER\控制面板\光标 HKEY_CURRENT_USER\控制面板

答案1

这篇文章深入研究了这个问题 使用 PowerShell 更改鼠标指针方案

作者总结说,仅仅更改注册表设置是不够的,还需要使用 Windows API 调用才能SystemParametersInfo 使它们生效。这需要转为另一种编程语言,在本例中是 C#。

以下是该帖子中的解决方案:

首先,我们将从 MSDN 中获取 C# 签名并将其作为此处字符串存储在我的脚本中:

$CSharpSig = @’
[DllImport(“user32.dll”, EntryPoint = “SystemParametersInfo”)]
public static extern bool SystemParametersInfo(
             uint uiAction,
             uint uiParam,
             uint pvParam,
             uint fWinIni);
‘@

接下来,我们将使用 Add-Type 和 C# 签名作为参数的值 MemberDefinition,并赋予其名称和命名空间。

$CursorRefresh = Add-Type -MemberDefinition $CSharpSig -Name WinAPICall -Namespace SystemParamInfo –PassThru

SystemParametersInfo最后,我们将使用 MSDN 参考页面指定的参数调用该方法:

$CursorRefresh::SystemParametersInfo(0x0057,0,$null,0)

如果一切顺利,当执行此操作时,鼠标指针方案将被更新,并且 Windows PowerShell 将返回 True。

答案2

正如 DavidPostill 所言,启动时会重新加载注册表项explorer.exe。您可以通过以下方式强制执行此过程:

  1. 打开任务管理器
  2. 查找 Windows 资源管理器
  3. 右键单击它,然后选择End Task

在此处输入图片描述

  1. 仍在任务管理器中,点击File>Run New Task
  2. explorer.exe在提示符中输入

在此处输入图片描述

  1. 单击“确定”,Windows 资源管理器将重新启动并应用您的新设置。

相关内容