前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用C# 快速实现Windows系统任务栏透明

使用C# 快速实现Windows系统任务栏透明

作者头像
Wesky
发布2024-09-06 16:52:14
1270
发布2024-09-06 16:52:14
举报
文章被收录于专栏:Dotnet Dancer

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Dotnet Dancer 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档