2009-12-07 68 views

回答

8

不可能单独更改窗口的颜色,但可以通过分区更改整个操作系统的颜色。条目应该是这样的:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Glass Colorization\Swatches连同HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM - ColorizationColor

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

+0

如何使用注册码更改颜色?你有任何示例代码? :D如何实现这个? :D – TheCardinal 2009-12-07 14:14:11

2

这对于C#/ .NET是不可能的。 WPF/WindowsForms仅允许您更改应用程序内部元素的边框。应用程序边界是用户控制的。

2

尽管bitbonk和george已经正确指出,窗口无法更改单个窗口的边框颜色,但您可以查看拥有者绘制窗口的内容。然后,您可能能够实现您所需的内容,但是,该窗口很可能不再像“本地”窗口一样。

参见SO上的this question

2

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

虽然我没有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); 
+0

欢迎来到计算器!你总是可以使用[Developer Fusion]从C#转换到VB.NET,反之亦然:)(http://www.developerfusion.com/tools/convert/vb-to-csharp/) – 2012-10-21 12:14:53