Urk*_*Urk 3 desktop windows-7 command-line colors cmd.exe
大家好,提前感谢您的任何帮助!
每次我在工作中重新启动 PC 时,组策略都会生效并将系统的背景颜色更改为公司默认值。在 Windows 7 中,因为背景颜色是较浅的颜色,所以它会使所有图标文本变暗,并且无法使用我的深色墙纸阅读。此外,如果我远程进入我的机器并禁用 UI 选项以获得更流畅的体验,背景是非常明亮的默认颜色而不是墙纸......所有这一切,基本上我都会通过手动将背景颜色更改为较深的颜色导航到“窗口颜色和外观”窗口并将桌面颜色设置为深色。

因此,我开始寻找一种方法来自动执行此更改,我的第一个想法是创建一个简单的 BAT 脚本并从我的 Startup 文件夹中启动它。我已经想出了如何更新此特定颜色更改的注册条目,但我似乎无法弄清楚如何使其生效,就像在“窗口颜色和外观”中选择“应用”按钮一样”窗口强制改变。
这是通过 CMD 进行的注册更改:
REG ADD "HKEY_CURRENT_USER\Control Panel\Colors" /v Background /t
REG_SZ /d "0 0 0" /f该命令似乎按预期更改注册表值。但是,它永远不会更新我的实际桌面。关于如何让它应用注册表更改的任何想法?
以下是我已经尝试过的几个命令,但它们似乎并没有奏效:
RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParametersRUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters 1, True我还尝试停止并重新启动桌面窗口管理器会话管理器,但颜色更改仍未应用:
NET STOP uxsmsNET START uxsms对于这个冗长的问题,我深表歉意。非常感谢任何帮助!
即使您正确设置了注册表项,更改也不会生效,因为不会发送相应的“设置已更改”通知。这种rundll32方法虽然通常被建议,但并不正确,而且只是偶然起作用。有关详细信息,请参阅在什么情况下可以使用 rundll32 调用 DLL 中的函数?
更改桌面背景颜色的正确方法是使用该SetSysColors功能,该功能会立即使您的设置生效。它不会更新注册表,但这并不重要,因为每次登录时您的注册表似乎都会被吹走。不幸的是,它是一种本地方法,没有在任何方便的命令行实用程序中公开。要调用它,我们可以使用 PowerShell!首先我们定义一个类型:
add-type -typedefinition "using System;`n using System.Runtime.InteropServices;`n public class PInvoke { [DllImport(`"user32.dll`")] public static extern bool SetSysColors(int cElements, int[] lpaElements, int[] lpaRgbValues); }"
Run Code Online (Sandbox Code Playgroud)
(P/Invoke 定义由这个 Stack Overflow 问题提供。)然后我们可以称之为:
[PInvoke]::SetSysColors(1, @(1), @(0xAA40C0))
Run Code Online (Sandbox Code Playgroud)
运行后,桌面变成漂亮的粉红色。0xAA40C0在我的示例中,颜色由最后一个参数决定。三个 ( AA)的最高有效字节是蓝色,其次是绿色,最后是红色。该@符号创建一个数组,这是函数所期望的。
要从批处理脚本中完成所有这些操作,请使用以下单行:
powershell -command add-type -typedefinition """"using System;`n using System.Runtime.InteropServices;`n public class PInvoke { [DllImport(`"""user32.dll`""")] public static extern bool SetSysColors(int cElements, int[] lpaElements, int[] lpaRgbValues); }""""; [PInvoke]::SetSysColors(1, @(1), @(0xAA40C0))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4315 次 |
| 最近记录: |