SetWindowCompositionAttribute 修改任务栏的颜色
可以通过 SetWindowCompositionAttribute()
函数来修改 Windows 10/11 任务栏的颜色。以下是一个简单的示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[DllImport("user32.dll")] private static extern int SetWindowCompositionAttribute(IntPtr hwnd, ref WindowCompositionAttributeData data); private void SetTaskbarBorderColor(Color color) { var hwnd = FindWindow("Shell_TrayWnd", null); var accent = new AccentPolicy { AccentState = AccentState.ACCENT_ENABLE_BLURBEHIND, AccentFlags = 0x20, GradientColor = ((uint)color.R << 16) | ((uint)color.G << 8) | color.B }; var accentStructSize = Marshal.SizeOf(accent); var accentPtr = Marshal.AllocHGlobal(accentStructSize); Marshal.StructureToPtr(accent, accentPtr, false); var data = new WindowCompositionAttributeData { Attribute = WindowCompositionAttribute.AccentPolicy, SizeOfData = accentStructSize, Data = accentPtr }; SetWindowCompositionAttribute(hwnd, ref data); Marshal.FreeHGlobal(accentPtr); } |
这个函数使用了 SetWindowCompositionAttribute()
函数来设置任务栏的边框颜色。具体来说,该函数会:
- 使用
FindWindow()
函数来获取任务栏窗口的句柄。 - 创建一个
AccentPolicy
结构体实例,其中包含了要设置的任务栏边框的颜色。 - 使用
Marshal.AllocHGlobal()
函数来分配一块非托管内存,用于存储AccentPolicy
结构体实例的数据。 - 使用
Marshal.StructureToPtr()
函数将AccentPolicy
结构体实例的数据复制到非托管内存中。 - 创建一个
WindowCompositionAttributeData
结构体实例,并将AccentPolicy
结构体的数据指针赋值给WindowCompositionAttributeData.Data
字段。 - 调用
SetWindowCompositionAttribute()
函数来设置任务栏边框的颜色。 - 最后使用
Marshal.FreeHGlobal()
函数释放非托管内存。
需要注意的是,该代码只能在 Windows 10/11 系统上运行,因为在其他系统上可能不存在 SetWindowCompositionAttribute()
函数。此外,由于该函数需要使用 P/Invoke 调用 Win32 API,因此需要在代码中引用一些系统命名空间。
如果您对C#游戏开发感兴趣,可以扫下面二维码加入我们的QQ群来一起学习交流
原创文章,转载请注明本文链接地址(违者必究):SetWindowCompositionAttribute 修改任务栏的颜色