WIN11桌面美化(任务栏透明)之AHK脚本

这还是终于找到了AHK实现的方法了,不过据说这个API不太完美,实现的效果有限,比不上UMP应用

不过我只要透明的话,内存占用特小,集合到我的AHK里面不是很好吗?

WIN11桌面美化(任务栏透明)之AHK脚本

WIN11桌面美化(任务栏透明)之AHK脚本

/*
win桌面美化,AHK桌面美化的小工具找得实在是困难,我一直想将那些小工具融合到自己可以调整的AHK中,,,可是资源少
任务栏背景透明
完全透明: accent_state := 2 并且 gradient_color := "0x01000000"
结合UMP应用RoudedTB,它成功将任务栏切割了,并可以单独隐藏右下角托盘区!  希望有人可以去RoudedTB里面看看能否用AHK实现?
UMP微软商店有一个TranslucentTB结合RoudedTB可以比较完美融合,但是我就是想少用一个软件,所以大概可以少用前者了
以下代码我是抄的AutoIt的,https://www.autoitscript.com/forum/topic/188664-function-setwindowcompositionattribute-convert-c-to-autoit/
反正能满足我的需求就可以了,毕竟中文论坛里面没有找到现成能用的
*/
#SingleInstance Force
#NoEnv
;accent_state := 2 ; 2代表透明,我用2,1
;gradient_color := "0x01000000" ; 0x01前面四个数字代表gradient梯度,它和透明2组合之后效果就是完全透明
;2, 0xa1e3c791)    ; <- Set transparent with color 0xd7a78f ( rgb = 0x91c7e3 ) and alpha 0xa1
TaskBarSet() ;函数默认全透明了,我就不用传参数了
TaskBarSet(accent_state:=2,gradient_color:="0x01000000")
{
	hTrayWnd := DllCall("User32\FindWindow", "str", "Shell_TrayWnd", "ptr", , "ptr")	
	pad := A_PtrSize=8 ? 4 : 0
	WCA_ACCENT_POLICY := 19
	accent_size := VarSetCapacity(ACCENT_POLICY, 16, 0)
		NumPut((accent_state>0 && accent_state<4) ? accent_state : 0, ACCENT_POLICY, 0, "int")
		NumPut(gradient_color, ACCENT_POLICY, 8, "int")
		VarSetCapacity(WINCOMPATTRDATA, 4 + pad + A_PtrSize + 4 + pad, 0)
		&& NumPut(WCA_ACCENT_POLICY, WINCOMPATTRDATA, 0, "int")
		&& NumPut(&ACCENT_POLICY, WINCOMPATTRDATA, 4 + pad, "ptr")
		&& NumPut(accent_size, WINCOMPATTRDATA, 4 + pad + A_PtrSize, "uint")
	DllCall("user32\SetWindowCompositionAttribute", "ptr", hTrayWnd, "ptr", &WINCOMPATTRDATA)
	;就是这么一个API
}
/* 这数据结构是这样的
typedef struct _WINDOWCOMPOSITIONATTRIBDATA {
    WINDOWCOMPOSITIONATTRIB Attrib;
    PVOID                   pvData;
    SIZE_T                  cbData;
} WINDOWCOMPOSITIONATTRIBDATA;
typedef enum _WINDOWCOMPOSITIONATTRIB {
    WCA_UNDEFINED = 0,
    WCA_NCRENDERING_ENABLED = 1,
    WCA_NCRENDERING_ENABLED = 1,
    WCA_NCRENDERING_POLICY = 2,
    WCA_TRANSITIONS_FORCEDISABLED = 3,
    WCA_ALLOW_NCPAINT = 4,
    WCA_CAPTION_BUTTON_BOUNDS = 5,
    WCA_NONCLIENT_RTL_LAYOUT = 6,
    WCA_FORCE_ICONIC_REPRESENTATION = 7,
    WCA_EXTENDED_FRAME_BOUNDS = 8,
    WCA_HAS_ICONIC_BITMAP = 9,
    WCA_THEME_ATTRIBUTES = 10,
    WCA_NCRENDERING_EXILED = 11,
    WCA_NCADORNMENTINFO = 12,
    WCA_EXCLUDED_FROM_LIVEPREVIEW = 13,
    WCA_VIDEO_OVERLAY_ACTIVE = 14,
    WCA_FORCE_ACTIVEWINDOW_APPEARANCE = 15,
    WCA_DISALLOW_PEEK = 16,
    WCA_CLOAK = 17,
    WCA_CLOAKED = 18,
    WCA_ACCENT_POLICY = 19,
    WCA_FREEZE_REPRESENTATION = 20,
    WCA_EVER_UNCLOAKED = 21,
    WCA_VISUAL_OWNER = 22,
    WCA_LAST = 23
} WINDOWCOMPOSITIONATTRIB;
typedef struct _ACCENT_POLICY {
    ACCENT_STATE AccentState;
    DWORD        AccentFlags;
    DWORD        GradientColor;
    DWORD        AnimationId;
} ACCENT_POLICY;
typedef enum _ACCENT_STATE {
    ACCENT_DISABLED = 0,
    ACCENT_ENABLE_GRADIENT = 1,
    ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
    ACCENT_ENABLE_BLURBEHIND = 3,
    ACCENT_INVALID_STATE = 4
} ACCENT_STATE;
_ACCENT_FLAGS {
    DrawLeftBorder = 0x20,
    DrawTopBorder = 0x40,
    DrawRightBorder = 0x80,
    DrawBottomBorder = 0x100,
    DrawAllBorders = (DrawLeftBorder | DrawTopBorder | DrawRightBorder | DrawBottomBorder)
}
*/   

不过这代码有个缺陷就是你一旦单击了任务的开始按钮之后,效果立马消失了!!!我也是无语

/*
Since clicking on Win-Start will reset the taskbar, it will be the best solution to use a SetTimer with x ms to set the Attribute
#NoEnv
#Persistent
#SingleInstance Force
SetBatchLines -1
SetTimer, UPDATE_TASKBAR, 100
return
UPDATE_TASKBAR:
    TaskBar_SetAttr(3)
return
*/


所以,建议就是保持后台运行,并且设置定时刷新,不过好在AHK内存少,不过还是不完美啊!
所以开头就改一下,....
#SingleInstance Force
#NoEnv
#Persistent
#NoTrayIcon        
SetBatchLines -1
SetTimer, UPDATE_TASKBAR, 100
return
UPDATE_TASKBAR:
TaskBarSet()
return

求有没有完美的AHK解决方案呀?!

给TA捐赠
共{{data.count}}人
人已捐赠
其他

计算剪贴板的字符个数和加空格,来自ilaoyao老兄的评论修改

2022-3-1 16:44:48

其他教程

AHK调用opencv(八)作为调色板的跟踪栏

2022-3-3 21:02:09

7 条回复 A文章作者 M管理员
  1. ahkjoo

    目前已经集成到我的AHK里面,虽然不太完美,但是内存超级小,可以了

  2. ahkjoo

    查看translucentTB代码及设置,发现它实现原理是一致的,它也会面对点击开始栏的问题,看看它的配置文件:
    ; Advanced settings
    ; sleep time in milliseconds, a shorter time reduces flicker when opening start, but results in higher CPU usage.
    sleep-time=10
    它的刷新时间非常短,所以带给的视觉上效果几乎没有,AHK的SETtmer一样设置短一点也可以一样效果.

  3. dbgba
    dbgba给您打赏了¥2
  4. Tmz

    不错不错,用上了、

  5. 祥祥呀

    写一个检测开始窗口打开/关闭的函数,如果开始窗口有过打开/关闭,就运行一次这个函数

  6. Tmz

    对于最新版的任务栏win11_23H2 这个代码就失效了!!!

    • ahkjoo

      为啥?我现在发现我的submenu没法用了,不知道咋回事,看代码和一起一样的。现在一点就要提示缺少lebel,无语了

个人中心
购物车
优惠劵
有新私信 私信列表
搜索