我在尝试使用 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 黑色方案。我尝试将这里的每个注册表都更改为黑暗模式,设置已更新,但光标本身没有更新。
答案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。