图标托盘(通知区域)注册表存储在哪里?

图标托盘(通知区域)注册表存储在哪里?

我需要知道系统托盘中的图标的位置和顺序存储在哪里。(通知区域)

我说的是这些:

在此处输入图片描述

我一直试图浏览一些 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
        }
    }
}

相关内容