我在 Windows 上遇到任务栏颜色问题。当我使用
SetWindowCompositionAttribute
方法更改任务栏颜色时,颜色最初按预期更改。但是,一旦我单击“开始”按钮,任务栏颜色就会恢复为 Windows 设置指定的默认颜色。
重现步骤:
SetWindowCompositionAttribute
更改任务栏颜色。预期行为:即使在与“开始”按钮交互后,任务栏颜色也应保持
SetWindowCompositionAttribute
设置的样子。
实际行为: 单击“开始”按钮时,任务栏颜色将恢复为默认 Windows 设置。
代码示例:
public static void SetTaskbarColor(Color color)
{
var accentPolicy = default(User32Interop.AccentPolicy);
accentPolicy.Color = color.ToAbgr();
accentPolicy.AccentState = 2;
accentPolicy.Flags = 2;
var data = default(User32Interop.Windowcompositionattribdata);
data.Attribute = User32Interop.WindowCompositionAttribute.WcaAccentPolicy;
data.SizeOfData = Marshal.SizeOf(typeof(User32Interop.AccentPolicy));
data.Data = Marshal.AllocHGlobal(data.SizeOfData);
Marshal.StructureToPtr(accentPolicy, data.Data, false);
var taskbarHandle = User32Interop.FindWindow("Shell_TrayWnd", null);
var secondaryTaskbarHandle = User32Interop.FindWindow("Shell_SecondaryTrayWnd", null);
if (taskbarHandle != nint.Zero)
{
User32Interop.SetWindowCompositionAttribute(taskbarHandle, ref data);
}
if (secondaryTaskbarHandle != nint.Zero)
{
User32Interop.SetWindowCompositionAttribute(secondaryTaskbarHandle, ref data);
}
Marshal.FreeHGlobal(data.Data);
}
解决方案是在 Timer 或 Thread 中添加改变任务栏颜色,这样会反复刷新任务栏