Windows系统,目前本地测试用的是win10系统,虽然系统有自带透明,但是实际上没啥效果。所以写了个小demo,用来使用C#语言开发的控制台程序,来实现更改任务栏背景实现透明效果。
先看下我现在的主题样式,自带的任务栏背景如下图,似乎不是很和谐。
代码编译以后,运行,我提供了几种不同的选项,大家可以根据自己需要进行设置。我此处设置的模糊透明效果(毛玻璃透明),输入3,自动设置完成。
程序自动设置了新的效果,如图所示,实现了透明毛玻璃效果。其他效果大家可以自行尝试。这个效果看起来明显舒服多了。
一些核心的代码说明。
1、枚举定义,有关定义和说明,我已经添加了注释,供参考。
代码语言:javascript复制 public enum AccentState
{
ACCENT_DISABLED = 0, // 禁用任何背景或透明效果
ACCENT_ENABLE_GRADIENT = 1, // 启用渐变背景,但不透明
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2, // 启用渐变背景,并带有透明效果
ACCENT_ENABLE_BLURBEHIND = 3, // 启用模糊效果背后的透明效果
ACCENT_ENABLE_ACRYLICBLURBEHIND = 4, // 启用亚克力样式的模糊透明效果,通常用于窗口和任务栏
ACCENT_ENABLE_HOSTBACKDROP = 5, // 启用托管背景的透明效果,应用于当前活动窗口后的背景
ACCENT_INVALID_STATE = 6 // 无效状态,通常用于错误处理或状态未定义
}
2、控制台根据用户输入的数字,传入对应枚举参数进行更改任务栏效果的具体实现:
代码语言:javascript复制public static void SetTaskbarTransparency(AccentState accentState)
{
var taskbarHwnd = FindWindow("Shell_TrayWnd", null);
if (taskbarHwnd != IntPtr.Zero)
{
var accent = new AccentPolicy();
accent.AccentState = accentState;
var accentStructSize = Marshal.SizeOf(accent);
var accentPtr = Marshal.AllocHGlobal(accentStructSize);
Marshal.StructureToPtr(accent, accentPtr, false);
var data = new WindowCompositionAttributeData();
data.Attribute = 19;
data.SizeOfData = accentStructSize;
data.Data = accentPtr;
SetWindowCompositionAttribute(taskbarHwnd, ref data);
Marshal.FreeHGlobal(accentPtr);
}
}
3、具体应用图示:
【注意】:由于这个demo获取了user32.dll的系统库的函数,所以某些杀软可能报毒,无视即可。
如果有需要以上测试源码的小伙伴,可以在我的gitee项目地址直接获取:
https://gitee.com/dreamer_j/transp-demo.git
如果只需要可执行程序的小伙伴,可以在源码库的发行版内直接下载:
https://gitee.com/dreamer_j/transp-demo/releases/tag/1