C# 如何通过编程更改Windows 7 Aero/窗口边框颜色?
我正在考虑制作一个程序,根据电池电量改变Windows7的aero颜色。我是c#的新手,我想知道如何通过编程更改Windows7 Aero 我有这个密码C# 如何通过编程更改Windows 7 Aero/窗口边框颜色?,c#,aero,dwm,C#,Aero,Dwm,我正在考虑制作一个程序,根据电池电量改变Windows7的aero颜色。我是c#的新手,我想知道如何通过编程更改Windows7 Aero 我有这个密码 [DllImport("dwmapi.dll", EntryPoint = "#127", PreserveSig = false)] public static extern void DwmGetColorizationParameters(out WDM_COLORIZATION_PARAMS
[DllImport("dwmapi.dll", EntryPoint = "#127", PreserveSig = false)]
public static extern void DwmGetColorizationParameters(out WDM_COLORIZATION_PARAMS parameters);
[DllImport("dwmapi.dll", EntryPoint = "#131", PreserveSig = false)]
public static extern void DwmSetColorizationParameters(WDM_COLORIZATION_PARAMS parameters, uint uUnknown);
public struct WDM_COLORIZATION_PARAMS {
public uint Color1;
public uint Color2;
public uint Intensity;
public uint Unknown1;
public uint Unknown2;
public uint Unknown3;
public uint Opaque;
}
虽然,我不知道如何使用它和设置自定义颜色。也许您可以联系这个小型计算机的开发人员。问问他是怎么做的。。我不确定他是否用了
C#
来完成这项任务。但是值得一试
这是我的最后一次搜索,我找不到其他有用的东西,所以…没有用于此的文档化API。这完全是出于设计:此设置由用户更改,而不是由应用程序更改。还有一个内置的小程序供用户使用:个性化控制面板 但就像您得到提示的代码一样,您可以使用一个未记录的API-
DwmSetColorizationParameters
。您只需仔细测试您的代码是否在所有目标操作系统上工作,并注意它可能会与任何新版本的Windows和/或对当前版本的Windows的任何更新发生冲突
我知道它以前在Windows7中工作,但我还没有用所有最新的service Pack和其他更新对它进行测试,也不知道它是否在Windows8中工作。这一切都取决于你去测试。使用未记录的API需要做大量的工作
不过你很幸运。已经为你做了反向工程。(可能还有其他人,比如编写你在问题中展示的代码的人。如果能给他们一些信任,那就太好了。也许是吧?)
以下是您如何使用它:
using System;
using System.Drawing;
using System.Globalization;
using System.Runtime.InteropServices;
class DwmManager
{
private struct DWM_COLORIZATION_PARAMS
{
public uint clrColor;
public uint clrAfterGlow;
public uint nIntensity;
public uint clrAfterGlowBalance;
public uint clrBlurBalance;
public uint clrGlassReflectionIntensity;
public bool fOpaque;
}
[DllImport("dwmapi.dll", EntryPoint = "#127", PreserveSig = false)]
private static extern void DwmGetColorizationParameters(out DWM_COLORIZATION_PARAMS parameters);
[DllImport("dwmapi.dll", EntryPoint = "#131", PreserveSig = false)]
private static extern void DwmSetColorizationParameters(ref DWM_COLORIZATION_PARAMS parameters,
bool unknown);
// Helper method to convert from a Win32 BGRA-format color to a .NET color.
private static Color BgraToColor(uint color)
{
return Color.FromArgb(Int32.Parse(color.ToString("X"), NumberStyles.HexNumber));
}
// Helper method to convert from a .NET color to a Win32 BGRA-format color.
private static uint ColorToBgra(Color color)
{
return (uint)(color.B | (color.G << 8) | (color.R << 16) | (color.A << 24));
}
// Gets or sets the current color used for DWM glass, based on the user's color scheme.
public static Color ColorizationColor
{
get
{
// Call the DwmGetColorizationParameters function to fill in our structure.
DWM_COLORIZATION_PARAMS parameters;
DwmGetColorizationParameters(out parameters);
// Convert the colorization color to a .NET color and return it.
return BgraToColor(parameters.clrColor);
}
set
{
// Retrieve the current colorization parameters, just like we did above.
DWM_COLORIZATION_PARAMS parameters;
DwmGetColorizationParameters(out parameters);
// Then modify the colorization color.
// Note that the other parameters are left untouched, so they will stay the same.
// You can also modify these; that is left as an exercise.
parameters.clrColor = ColorToBgra(value);
// Call the DwmSetColorizationParameters to make the change take effect.
DwmSetColorizationParameters(ref parameters, false);
}
}
}
这是一个很好的教程,但对我这样的人来说并不是很有帮助,因为我没有C++经验,所以标签C是。你认为是正确的,我认为它是用于<代码> C<<代码>,检查我编辑的链接。新链接解释了如何在应用程序上启用它自己,而不是改变窗口的颜色。这是我最后的编辑,我找不到任何其他东西。祝你好运。谢谢你的帮助!哇!谢谢你。我稍后再查,我会给你回电话的。非常感谢。工作完美无瑕!我只是不知道结构的形式是:DWM_COLORIZATION_PARAMS DWM=new DWM_COLORIZATION_PARAMS()@当然可以。在C#中,创建新对象的方式相同,无论是类还是结构。所有结构成员都被初始化为其默认值,对于像
uint
这样的数字类型,默认值是0
。但是,由于您要将对它的引用传递给DwmGetColorizationParameters
函数以填充其成员,因此这并不重要。:-)
[DllImport("dwmapi.dll")]
private static extern int DwmIsCompositionEnabled(ref bool pfEnabled);