标签 claunch 下的文章

Windows 11的任务栏,确实很鸡肋。于是想办法做功能增强。

1. 存在问题

对比历史版本Windows(XP、7、10)的任务栏,Windows 11任务栏存在以下缺点:

  • 可自定义功能不多
  • 不支持任务平铺,即不进行分组合并显示(注,2023-11-20,发现Win11更新后可以设置任务栏图标不合并)
  • 不能添加快捷菜单集合
  • 不能调整高度,占据屏幕空间比较多

2. 可选方案

2.1. ExplorerPatcher

2.2. StartAllBack

2.3. CLaunch

  • 项目地址:CLaunch
  • 优点:免费,轻量,对系统没有任何影响。
  • 缺点:只是个弹出菜单(不能替代任务栏),不开源。

3. 解决方案

最后,我选择了基于CLaunch,实现任务栏辅助。主要是解耦,避免对系统的影响,也便于维护、迁移和备份。

3.1. 任务栏设置

任务栏设置为自动隐藏,节省屏幕空间。

注:由于任务栏可以设置图标不合并,没必要隐藏任务栏了。

3.2. 部署CLaunch

其当前最新版v4.05,由于在virustotal.com被大量杀毒软件检测出木马,所以选择了v4.04。

皮肤推荐:yurafuca/claunch-win10: Windows 10 Flavored CLaunch Skin.

我比较喜欢只有一列的布局(像《刀剑神域》游戏里的菜单),并且设置显示规则为:

  • 双击屏幕左侧边缘显示
  • 双击桌面显示
  • 快捷键 Ctrl + Shift + Q 显示
  • 任务栏添加固定图标,点击即可显示

3.3. 常用快捷方式

常用的快捷方式,会保存到指定文件夹,在CLaunch指向该文件夹,并以子菜单显示。这样维护、备份、迁移都比较简单。

3.4. 平铺显示任务列表

Windows 11自动一个平铺任务列表,按 Win + Tab 显示。可以编写vbs文件,并在Claunch设置为按钮,现实点击显示。相关代码如下:

rem 文件名:tasks.vbs
rem 运行平铺显示的任务列表,Windows默认快捷键:Win + Tab
rem 参考:https://learn.microsoft.com/en-us/windows/win32/shell/shell-windowswitcher
set objShell = CreateObject("shell.application")
objShell.WindowSwitcher
set objShell = nothing

3.5. 添加快捷功能

比如要在Claunch添加按钮,实现显示桌面,可以使用vbs模拟按键实现。相关代码如下:

rem 文件名:desktop.vbs
rem 显示桌面,Windows默认快捷键:Win + D
rem 参考:https://learn.microsoft.com/en-us/windows/win32/shell/shell-toggledesktop
set objShell = CreateObject("shell.application")
objShell.ToggleDesktop
set objShell = nothing

关于vbs模拟按键,可以参考:VBS自动按键大全,vbs基本和特殊按键 - 笨蛋敏 - 博客园

例如要实现显示Windows开始菜单,可以使用Ctrl + ESC,模拟Win按键。相关代码如下:

rem 文件名:start.vbs
rem 显示开始菜单,Windows默认快捷键:Win
Set wsShell = WScript.CreateObject("WScript.Shell")
wsShell.SendKeys "^{ESC}"
set wsShell = nothing

3.6. 通讯软件的消息提醒

通讯软件有消息时,任务栏有提醒效果。如果任务栏自动隐藏,收到消息时会自动显示。如果觉得还不够,可能会导致错过消息,可以设置通讯软件(例如TIM),收到新消息就弹出对话窗口。

3.7. 显示时间

目前没有很好的解决方案。要么就装个显示时间的软件(例如 DesktopClock),要么就弹窗显示当前时间(代码如下)。但是两个方案都不够好用。

rem 文件名:show_time.vbs
rem 弹出当前日期时间
rem 注意:本VBScript文件涉及中文显示,需要使用ANSI编码
rem
rem 参考:
rem https://learn.microsoft.com/en-us/windows/win32/shell/shell-windows

rem 弹窗标题
title = "当前时间"
rem 弹窗保持的秒数,指定时间之后自动关闭。0为不自动关闭。
holdSec = 3

curDateTime = Now()
weekdayInt = Weekday(curDateTime)
Select Case weekdayInt
  Case 1
    weekdayStr="星期日"
  Case 2
    weekdayStr="星期一"
  Case 3
    weekdayStr="星期二"
  Case 4
    weekdayStr="星期三"
  Case 5
    weekdayStr="星期四"
  Case 6
    weekdayStr="星期五"
  Case 7
    weekdayStr="星期六"
  Case Else
    weekdayStr="星期日"
End Select

msg = Year(curDateTime) & "-" & Right("0" & Month(curDateTime), 2) & "-" & Right("0" & Day(curDateTime), 2) 
msg = msg & vbCrLf & Right("0" & Hour(curDateTime), 2) & ":" & Right("0" & Minute(curDateTime), 2) & ":" & Right("0" & Second(curDateTime), 2)
msg = msg & vbCrLf & weekdayStr

rem CreateObject("Wscript.Shell").Popup msg, 3, title, 64
Set objShell = CreateObject("WScript.Shell")
objShell.Popup msg, holdSec, title, 64
Set objShell = nothing