【问题标题】:programmatically change the windows color border of windows 7 [duplicate]以编程方式更改Windows 7的Windows颜色边框[重复]
【发布时间】:2009-12-07 10:26:41
【问题描述】:

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

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

【问题讨论】:

    标签: c# windows-7


    【解决方案1】:

    无法单独更改窗口的颜色,但您可以通过注册表更改整个操作系统的颜色。条目应该是这样的:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Glass Colorization\SwatchesHKEY_CURRENT_USER\Software\Microsoft\Windows\DWM - ColorizationColor

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

    【讨论】:

    • 如何使用 reg 键更改颜色?你有任何示例代码吗? :D 关于如何实现这个? :D
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      虽然 bitbonk 和 george 已经正确地指出窗口不能更改单个窗口的边框颜色,但您可能会考虑使用所有者绘制窗口。然后,您可能能够实现所需的功能,但是,该窗口很可能不再像“本机”窗口了。

      请参阅 SO 上的 this question

      【讨论】:

        【解决方案4】:

        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);
        

        【讨论】:

        • 欢迎来到stackoverflow!您始终可以使用 Developer Fusion 将 C# 转换为 VB.NET,反之亦然:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 2013-08-28
        • 2015-12-05
        • 1970-01-01
        相关资源
        最近更新 更多