您的第一次尝试失败了,因为手动编辑注册表从来都不是更改系统设置的正确方法。正如您所发现的,许多 Windows 组件(和其他应用程序!)一次读取这些配置值并缓存它们,从而防止您的更改被传播。另一个问题(你会惊讶于我看到这种情况的频率)是试图在注册表中乱七八糟的应用程序通常最终会破坏事物。
相反,您应该调用记录在案的 API 来更改设置。几乎总是有一个记录在案的方法,如果没有,那么你不应该这样做。
这似乎是其中一种情况。有一个记录在案的DwmGetColorizationColor
功能,但没有相应的DwmSetColorizationColor
功能,正如人们所期望的那样。
原因是用户应该是唯一可以更改其着色设置的人,而不是其他应用程序。您可能会承诺不会滥用这一点,并且只在用户明确请求时进行此类更改,但并非所有应用程序都可以信任这样做。很多人会恶意使用它,因此这些功能尚未记录和公开。
但像往常一样,如果你继续下去,你通常可以找到一种无证的做事方式。使用未记录函数的问题在于不能保证它们会工作或继续工作。他们被故意留下来没有记录,因为他们很可能在新版本的 Windows 上发生变化。您只应自担风险使用它们。
在这种情况下,如果您使用 DumpBin 之类的程序从 DWM DLL ( dwmapi.dll
) 中获取所有导出函数的列表,您将看到许多未记录的导出函数。
您感兴趣的是DwmGetColorizationParameters
和DwmSetColorizationParameters
。这两个函数都将COLORIZATIONPARAMS
结构作为参数,其中包含它们需要的值。
因此,您需要对这些函数进行逆向工程并获得适当的定义。然后,您可以调用该DwmGetColorizationParameters
函数,传入一个COLORIZATIONPARAMS
结构来获取当前的配置设置;修改包含当前着色颜色的结构成员;然后将结构的修改版本传递给DwmSetColorizationParameters
函数。
我有没有提到我不建议这样做?