2009-12-07 73 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

相關問題