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

Windows系统,目前本地测试用的是win10系统,虽然系统有自带透明,但是实际上没啥效果。所以写了个小demo,用来使用C#语言开发的控制台程序,来实现更改任务栏背景实现透明效果。

先看下我现在的主题样式,自带的任务栏背景如下图,似乎不是很和谐。

18a0a050d39a2bc066e3bfcbd32b972f.png

代码编译以后,运行,我提供了几种不同的选项,大家可以根据自己需要进行设置。我此处设置的模糊透明效果(毛玻璃透明),输入3,自动设置完成。

02fcf42c45fde996ad638e792b89690c.png

程序自动设置了新的效果,如图所示,实现了透明毛玻璃效果。其他效果大家可以自行尝试。这个效果看起来明显舒服多了。

9681be0adb2a50d6379f1289fd974ffb.png

一些核心的代码说明。

1、枚举定义,有关定义和说明,我已经添加了注释,供参考。

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、控制台根据用户输入的数字,传入对应枚举参数进行更改任务栏效果的具体实现:

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、具体应用图示:

19192024d2a2c5b2bc86e510df7c62b7.png

【注意】:由于这个demo获取了user32.dll的系统库的函数,所以某些杀软可能报毒,无视即可。

如果有需要以上测试源码的小伙伴,可以在我的gitee项目地址直接获取:

https://gitee.com/dreamer_j/transp-demo.git

如果只需要可执行程序的小伙伴,可以在源码库的发行版内直接下载:

https://gitee.com/dreamer_j/transp-demo/releases/tag/1

843447776e696bdb8b283728a1151177.png

以上就是本文章的全部内容,如果觉得有帮助,欢迎点赞、转发、在看等。也欢迎关注我的个人公众号:Dotnet Dancer

5d4ae5a96a40a09978d161068663e3aa.jpeg

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值