标签 Windows 下的文章

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

终于用上了Windows 11,版本是22h2。记录一下针对开发人员的相关优化。

1 安装时跳过TPM限制

安装过程,在提示“这台电脑无法安装Windows11”的界面,按Shift + F10,弹出CMD窗口输入“regedit”,打开注册表编辑器。

在注册表编辑器进入[HKEY_LOCAL_MACHINE\SYSTEM\Setup],新建“项”,名为“LabConfig”(注意大小写一致)。

在“LabConfig”下,新建两个“DWORD (32位)值”,如下(记得注意大小写一致):

  • 数值名称:BypassTPMCheck,数值数据:00000001,基数:十六进制(H)
  • 数值名称:BypassSecureBootCheck,数值数据:00000001,基数:十六进制(H)

完成后关闭“注册表编辑器”、“CMD窗口”,按返回上一步的按钮,再按下一页,就通过系统限制检测。

2 安装时避免强制登录账户

按Shift + F10,弹出CMD窗口输入“regedit”,打开注册表编辑器。

在注册表编辑器进入[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE],新建一个“DWORD (32位)值”,如下(记得注意大小写一致),如下。

  • 数值名称:BypassNRO,数值数据:00000001,基数:十六进制(H)

退出注册表编辑器后,输入命令“logoff”,即可即可跳过强制联网登录账号。

如果不想编辑注册表,在CMD窗口输入命令“oobe\BypassNRO.cmd”,系统重启后即可。

3 创建本地用户

安装成功后,需要创建本地用户。最好不要登录微软账户。

最简单的是创建和使用管理员账号(Administrator)登录,避免访问其它硬盘的已存在文件时,提示需要管理员账号。

如果使用自定义账号(即拥有管理员权限的非Administrator账号),需要修改电脑上已存在文件的权限,改为新增账号拥有“完全控制”的权限。如果存在大量零碎文件,这个过程超级漫长。

4 解锁任务栏

在Windows 11中,用户无法通过“任务栏”使用“快速启动工具栏”,通过安装“ExplorerPatcher”解锁相关功能。

ExplorerPatcher - GitHub
https://github.com/valinet/ExplorerPatcher

我整理了一堆快捷方式,大多是常用的,利用“快速启动工具栏”,实现快速点击,类似开始菜单的效果。

5 优化内存占用

1)关闭不必要的自启动

依次进入:设置 -> 应用 -> 启动。把不需要自启软件关闭。

2)关闭动画效果

依次进入:设置 -> 辅助功能 -> 视觉效果。“动画效果”设置关闭。这个优化,大概省了1GB内存。

6 恢复旧的右键菜单

新的右键菜单过于简单,隐藏了太多的功能。使用管理员运行CMD,输入以下命令。执行成功后重启,即可看到效果。

reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve

7 安装 WinMerge

开源的文件对比和合并工具,用于替代Beyond Compare。

启用“高级菜单”,选择文件对比时更方便。运行WinMerge,依次进入“编辑”->“选项”->左侧菜单点“系统集成”,在“资源管理器”下,勾选“添加到上下文菜单”、“启用高级菜单”。

8 显示多个时区的时间

依次进入:设置 -> 时间和语言 -> 日期和时间 -> 相关链接 -> 附加时钟。设置完毕后按“确定”。建议设置以下时间:

  • (UTC) 协调世界时。

设置完成后,点击任务栏的时间,即可看到新增的时区时间。

9 Office软件

目前使用开源的LibreOffice,代替微软Office,用着还行。

10 安装WSL2

Window上运行Linux软件,包括GUI软件。这样连SSH客户端都不用安装了。

主要过程是,开启Windows功能、安装内核、安装Linux发行版。相关文档如下:

11 解决不能自动关机

关机时,会提示有进程正在运行,需要点按钮才能关机。这问题导致使用shutdown命令和远程桌面都不能关机。

解决方案:打开注册表,进入“\HKEY_USERS.DEFAULT\Control Panel\Desktop”,新建“字符串值(S)”,名称为“AutoEndTasks”,值为“1”。