以编程方式更改Windows 7的Windows颜色边框

时间:2009-12-07 10:26:42

标签: c# windows-7

  

可能重复:
  How does Windows change Aero Glass color?

使用c#在Windows 7上运行aero时如何以编程方式更改窗口边框颜色?

4 个答案:

答案 0 :(得分:8)

无法单独更改窗口的颜色,但您可以通过resgistry更改操作系统范围内的颜色。条目应如下所示:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Glass Colorization\SwatchesHKEY_CURRENT_USER\Software\Microsoft\Windows\DWM - ColorizationColor

结合使用

在您的代码中,您只能调整玻璃边框的形状和大小,但我不认为颜色。在Windows Forms it is done like本和WPF like this

答案 1 :(得分:2)

使用C#/ .NET无法实现这一点。 WPF / WindowsForms只允许您更改应用程序内元素的边框。应用程序边框由用户控制。

答案 2 :(得分:2)

虽然bitbonk和george已正确指出窗口无法更改单个窗口的边框颜色,但您可能会查看所有者绘制窗口。然后,您可以实现所需的功能,但窗口很可能看起来不再像“原生”窗口。

请参阅SO上的this question

答案 3 :(得分:2)

TheCardinal:您的注册表方法不会立即更改颜色,并且需要重新启动桌面窗口管理器服务。 有一个未记录的Windows API函数,允许您立即更改Aero主题的颜色。 (这又是一个全局变化 - 适用于所有窗口)

虽然我没有C#代码来执行此操作,但VB.NET应该可以帮助您,因为它们本质上是相同的东西

<DllImport("dwmapi.dll", EntryPoint:="#127", PreserveSig:=False)> _
Public Shared Sub DwmGetColorizationParameters(ByRef parameters As WDM_COLORIZATION_PARAMS)
End Sub
//this above function GETS the color, and stores it in parameters.
<DllImport("dwmapi.dll", EntryPoint:="#131", PreserveSig:=False)> _
Public Shared Sub DwmSetColorizationParameters(ByRef parameters As WDM_COLORIZATION_PARAMS, ByVal uUnknown As UInteger)
End Sub
//this above function SETS the color, and stores it in parameters.

最后结构WDM_COLORIZATION_PARAMS被定义为这样(再次在VB.NET中,抱歉)

Public Structure WDM_COLORIZATION_PARAMS
    Public Color1 As Int32
    Public Color2 As Int32
    Public Intensity As Int32
    Public Unknown1 As Int32
    Public Unknown2 As Int32
    Public Unknown3 As Int32
    Public Opaque As Long
End Structure

代码逻辑如下:

WDM_COLORIZATION_PARAMS temp = getColor();
temp.Color1 = System.Drawing.Color.FromArgb(alpha,red,green,blue).ToArgb();
temp.Color2 = System.Drawing.Color.FromArgb(alpha,red,green,blue).ToArgb();
setColor(temp);