注意到有一阵了,Windows 10 的开始菜单里有好几个条目,本身是个文件夹,但点击打开后一看,里面却只有一项,简直就是耽误功夫。心想怎么才能让它如果下面只有一项的话直接展现到上面来。
首先是要找到这些菜单项目从何而来。观察了一下,有 C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
和 C:\ProgramData\Microsoft\Windows\Start Menu\Programs
两个来源,大概前者是用户私有项,后者是系统范围的共有项。
Windows 在展示它们的时候,至少做了两个处理。其一是组织扁平化为为最多两级,也就是说文件夹下的快捷方式与其下子文件夹下的快捷方式会抹平层级;其二是将带有“Uninstall”或者“卸载”字样的快捷方式进行了隐藏(我怀疑带有“remove”字样的也会同此待遇),但奇怪的是腾讯 QQ 的卸载快捷方式并没有被隐藏起来,是一个观察到的特例。
还有一个现象是网易云音乐带来的。这个程序在 Programs 下创建了名为“网易云音乐.lnk”的快捷方式和名为“网易云音乐”的文件夹,但在开始菜单里只能看到前者,说明后者由于和前者的名字部分相同而导致被开始菜单项的处理程序有意无意地隐藏起来了。
基于以上认识,写一个程序来达到文首的目的就应该不是很难了。对了,顺便贴一段枚举开始菜单项的 PowerShell 脚本:
1 2 3 4 5 6 7 8 9 10 11 12 |
$strComputer = "." $colItems = get-wmiobject -class "Win32_LogicalProgramGroupItem" -namespace "root\CIMV2" -computername $strComputer foreach ($objItem in $colItems) { write-host "Caption: " $objItem.Caption write-host "Description: " $objItem.Description write-host "InstallationDate: " $objItem.InstallDate write-host "Name: " $objItem.Name write-host "Status: " $objItem.Status write-host } |