我需要知道系统托盘中的图标的位置和顺序存储在哪里。(通知区域)
我说的是这些:
我一直试图浏览一些 reg 文件,我猜测它位于这里的某个地方:
"HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache"
"HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags"
"HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU"
"HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Bags"
"HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\BagMRU"
"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store"
"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted"
"HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache"
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU"
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU"
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRULegacy"
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU"
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist"
答案1
不确定您最终是否弄明白了这一点,但我发现以下键包含使用系统托盘的应用程序列表:
HKEY_CURRENT_USER\Control Panel\NotifyIconSettings
在某些应用程序键中,有一个名为“IsPromoted”的 DWORD。如果此键的值为 1,则托盘图标始终可见,而 0 表示托盘图标隐藏。
如果您更改 IsPromoted 的值,它会立即生效,因为您不需要重新启动 Explorer.exe。
我已经在 Windows 11 中测试过这一点。
需要注意的一点是,每个应用程序的密钥名称在每台计算机上并不一致,例如,我检查过的一台计算机上 OneDrive.exe 的密钥是:
HKEY_CURRENT_USER\控制面板\NotifyIconSettings\5434357290411014857
但在另一个应用程序中,同一个应用程序却列在不同的键名下:
HKEY_CURRENT_USER\控制面板\NotifyIconSettings\5889842883606957982
这种情况也会发生在同一设备上的不同用户之间。
因此,Windows 似乎在为每个用户/系统命名键时生成一个唯一的应用程序 ID。因此,这里的解决方案是创建一个带有 foreach 循环的 PowerShell 脚本,以搜索“NotifyIconSettings”中的每个键,以查找您要提升的特定可执行文件,并在找到后,将 IsPromoted DWORD 编辑为值 1。
答案2
这是我为 Windows 11 创建的 Powershell 脚本:)
#Title: Unhide systemtray icon by name.exe
#Version: 1.0
# List of executable paths to search for
$executablePaths = @(
"*onedrive.exe*",
"*clickpaste.exe*"
)
# Register path to
$registryPath = "HKCU:\Control Panel\NotifyIconSettings"
# Get all subkeys under the registry path
$subKeys = Get-ChildItem -Path $registryPath
# Iterate through each subkey
foreach ($subKey in $subKeys) {
# Get the ExecutablePath value
$executablePath = (Get-ItemProperty -Path "$($subKey.PSPath)").ExecutablePath
# Check if any of the specified executable paths match
foreach ($path in $executablePaths) {
if ($executablePath -like $path) {
# Add or overwrite the IsPromoted DWORD value with decimal value 1
Set-ItemProperty -Path "$($subKey.PSPath)" -Name "IsPromoted" -Value 1 -Type DWORD -ErrorAction SilentlyContinue
break
}
}
}