Faire en sorte que l'icône de la barre d'état spécifique s'affiche toujours pour tous les profils dans Windows 7

13

J'installe une machine Windows 7 qui restera ouverte et partagée par beaucoup de gens. J'ai ajouté un raccourci au menu Démarrer de tous les utilisateurs pour exécuter un programme qui se trouve dans la barre d'état système. Je veux que l'icône de la barre d'état de ce programme soit toujours visible par défaut, peu importe qui se connecte. Un utilisateur peut le désactiver sur son profil s'il le souhaite vraiment, mais j'en ai besoin pour commencer au moins comme toujours visible. Comment puis-je faire ceci?

Je préfère ne pas afficher toutes les icônes, en partie pour la même raison qu'elles sont cachées en premier lieu: je ne veux pas l'encombrement. De plus, comme il s'agit d'un ordinateur public, il existe un autre programme appelé DeepFreeze en cours d'exécution qui a également une icône dans la barre d'état système, et je ne veux pas que cette icône s'affiche tout le temps.

Joel Coehoorn
la source
Vous ne pouvez pas afficher l'icône / message par un autre mécanisme que dans la barre d'état système?
jalf

Réponses:

11

En résumé, actuellement, vous ne pouvez pas faire cela.

Il n'y a pas de stratégie de groupe ou de préférence pour définir cela, et la façon dont il assure le suivi le rend spécifique à l'utilisateur actuel et au système, ce qui fait que les «paramètres» varient considérablement d'une instance à l'autre.

Ils sont stockés ici (dans le Registre) si vous voulez vérifier: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify.

D' ici :

Il n’existe aucun moyen pour les applications de s’afficher systématiquement par niveau supérieur dans la barre d’état système lors de la première installation ou à tout moment pendant l’exécution. C'est l'une des nombreuses modifications que nous avons apportées à Windows 7 dans le but de produire un bureau plus propre et plus silencieux qui est sous le contrôle de l'utilisateur pour personnaliser le niveau supérieur avec leurs applications et icônes préférées.

Nous gardons l'utilisateur en contrôle de la zone de notification en n'autorisant pas la promotion programmatique (autre que temporairement ou pour afficher une notification). En supposant que la machine est suffisamment silencieuse, lorsque vous ajoutez votre icône avec Shell_NotifyIcon (NIM_ADD, ...) pour la première fois, elle s'affichera dans la barre des tâches pendant 45 secondes, puis passera au débordement par la suite. Si l'utilisateur fait la promotion d'une icône, celle-ci vivra toujours dans la barre des tâches. Si l'utilisateur le rétrograde, l'icône ne sera jamais visible dans la barre des tâches. Toute promotion doit être initiée par l'utilisateur. Nous avons rendu cela beaucoup plus facile dans Windows 7 par glisser / déposer et via le panneau de configuration des icônes de la zone de notification, et ce que nous avons vu dans les études d'utilisabilité et sur la base des commentaires bêta, c'est que les utilisateurs n'ont aucune difficulté à découvrir comment personnaliser le comportement de notification et fera la promotion des icônes auxquelles ils souhaitent accéder rapidement.

Votre pari le plus simple consiste à afficher TOUTES les icônes de la zone de notification pour tous les utilisateurs. Cela peut être fait en ajoutant une entrée de registre (simple):

Dans, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorercréez une nouvelle valeur DWORD nommée EnableAutoTrayet définissez-la pour 0désactiver les fonctionnalités de «masquage automatique» de la zone de notification.

Avec une configuration d'unité d'organisation et des scripts, vous pouvez également l'utiliser dans un contexte HKCU, si vous ne souhaitez que cela se produise pour certains utilisateurs / groupes.

Voir ici pour plus d'informations à ce sujet.

Ƭᴇcʜιᴇ007
la source
Je préfère ne pas afficher toutes les icônes, mais je le ferai si je le dois.
Joel Coehoorn
10

Je cherchais en ligne et j'ai trouvé cela au hasard.

Pour faire court, une combinaison de PowerShell (script fourni) et de GPO.

http://4sysops.com/archives/forcing-notification-area-icons-to-always-show-in-windows-7-or-windows-8/

Longue histoire, créez un script PowerShell contenant les éléments suivants:

param(
    [Parameter(Mandatory=$true,HelpMessage='The name of the program')][string]$ProgramName,
    [Parameter(Mandatory=$true,HelpMessage='The setting (2 = show icon and notifications 1 = hide icon and notifications, 0 = only show notifications')]
        [ValidateScript({if ($_ -lt 0 -or $_ -gt 2) { throw 'Invalid setting' } return $true})]
        [Int16]$Setting
    )

$encText = New-Object System.Text.UTF8Encoding
[byte[]] $bytRegKey = @()
$strRegKey = ""
$bytRegKey = $(Get-ItemProperty $(Get-Item 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify').PSPath).IconStreams
for($x=0; $x -le $bytRegKey.Count; $x++)
{
    $tempString = [Convert]::ToString($bytRegKey[$x], 16)
    switch($tempString.Length)
    {
        0 {$strRegKey += "00"}
        1 {$strRegKey += "0" + $tempString}
        2 {$strRegKey += $tempString}
    }
}
[byte[]] $bytTempAppPath = @()
$bytTempAppPath = $encText.GetBytes($ProgramName)
[byte[]] $bytAppPath = @()
$strAppPath = ""

Function Rot13($byteToRot)
{
    if($byteToRot -gt 64 -and $byteToRot -lt 91)
    {
        $bytRot = $($($byteToRot - 64 + 13) % 26 + 64)
        return $bytRot
    }
    elseif($byteToRot -gt 96 -and $byteToRot -lt 123)
    {
        $bytRot = $($($byteToRot - 96 + 13) % 26 + 96)
        return $bytRot
    }
    else
    {
        return $byteToRot
    }
}

for($x = 0; $x -lt $bytTempAppPath.Count * 2; $x++)
{
    If($x % 2 -eq 0)
    {
        $curbyte = $bytTempAppPath[$([Int]($x / 2))]
            $bytAppPath += Rot13($curbyte)

    }
    Else
    {
        $bytAppPath += 0
    }
}

for($x=0; $x -lt $bytAppPath.Count; $x++)
{
    $tempString = [Convert]::ToString($bytAppPath[$x], 16)
    switch($tempString.Length)
    {
        0 {$strAppPath += "00"}
        1 {$strAppPath += "0" + $tempString}
        2 {$strAppPath += $tempString}
    }
}
if(-not $strRegKey.Contains($strAppPath))
{
    Write-Host Program not found. Programs are case sensitive.
    break
}

[byte[]] $header = @()
$items = @{}
for($x=0; $x -lt 20; $x++)
{
    $header += $bytRegKey[$x]
}

for($x=0; $x -lt $(($bytRegKey.Count-20)/1640); $x++)
{
    [byte[]] $item=@()
    $startingByte = 20 + ($x*1640)
    $item += $bytRegKey[$($startingByte)..$($startingByte+1639)]
    $items.Add($startingByte.ToString(), $item)
}

foreach($key in $items.Keys)
{
$item = $items[$key]
    $strItem = ""
    $tempString = ""

    for($x=0; $x -le $item.Count; $x++)
    {
        $tempString = [Convert]::ToString($item[$x], 16)
        switch($tempString.Length)
        {
            0 {$strItem += "00"}
            1 {$strItem += "0" + $tempString}
            2 {$strItem += $tempString}
        }
    }
    if($strItem.Contains($strAppPath))
    {
        Write-Host Item Found with $ProgramName in item starting with byte $key
            $bytRegKey[$([Convert]::ToInt32($key)+528)] = $setting
            Set-ItemProperty $($(Get-Item 'HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify').PSPath) -name IconStreams -value $bytRegKey
    }
}

Enregistrez-le en tant que fichier ps1 en utilisant le nom de votre choix.

Ouvrez la console MMC de gestion des stratégies de groupe. Sélectionnez l'objet de stratégie de groupe que vous avez choisi, cliquez avec le bouton droit et sélectionnez Modifier. Dans l'éditeur, accédez à Configuration utilisateur> Paramètres Windows> Scripts> Connexion et cliquez sur "Propriétés d'affichage". Accédez à l'onglet PowerShell et cliquez sur Afficher les fichiers.

Copiez le script que vous venez de créer dans la fenêtre de l'Explorateur qui vient de s'ouvrir, puis fermez-la.

Dans la fenêtre des propriétés du script de connexion, ajoutez un nouveau script PowerShell, dans le nom du script, entrez le nom du script que vous avez utilisé (exemple: NotifyIcon.ps1), puis dans les paramètres, entrez le nom du programme (sensible à la casse!) Suivi par le paramètre à utiliser:

0 = afficher uniquement les notifications 1 = masquer l'icône et les notifications 2 = afficher l'icône et les notifications <--- Celui dont vous avez besoin

Par exemple, si vous avez besoin que le serveur RealVNC apparaisse toujours, vous devez entrer:

winvnc4.exe 2

comme les paramenters

Vous pouvez trouver le nom de l'exécutable de deux manières différentes, comme ouvrir une boîte de dialogue Exécuter et taper msconfiget regarder les programmes de démarrage, naviguer manuellement dans le répertoire d'installation C:\Program Files\{your program}ou essayer de faire correspondre le programme souhaité en regardant l'exécution. processus dans le Gestionnaire des tâches. 9 fois sur 10, cela aboutira au succès.

Pour que cela fonctionne, l'utilisateur doit avoir préalablement exécuté l'application, puis se déconnecter correctement, afin qu'explorer.exe ait la possibilité d'écrire l'historique de la zone de notification mis à jour dans le Registre. Lors d'une connexion ultérieure, le script doit réussir à localiser le programme dans l'historique et à mettre à jour son paramètre pour qu'il s'affiche toujours.

Vous pouvez également essayer d'exécuter le script manuellement à partir d'une invite PowerShell pour déboguer, mais vous DEVEZ tuer explorer.exe ('taskkill / f / im explorer.exe') avant de l'exécuter, sinon l'explorateur ne verra pas votre mise à jour et écrasera quand il quitte.

Je ne prends aucun crédit pour ce processus. Je ne l'ai pas écrit, je l'ai juste trouvé. Le mérite du script revient à Micah Rowland . Le mérite du processus GPO revient à Geoff Kendal

Joshua Parnell
la source
Je suis absent du bureau pendant un certain temps, et au moment où je reviendrai, j'aurai oublié cela. Si vous pouvez @répondre à ce commentaire à la fin de la semaine prochaine, je pourrai y regarder de plus près et peut-être changer la réponse acceptée.
Joel Coehoorn
Les réponses de lien uniquement sont un non-non en raison d'une possible rotation de lien future. Veuillez inclure des informations pertinentes dans votre réponse. Nous ne nous soucions pas non plus si vous avez répondu à une ancienne question, c'est en fait une BONNE chose, alors pensez à supprimer vos "excuses" et les raisons de la publication. :)
Ƭᴇcʜιᴇ007
@ techie007 Merci, édité @ Joel Coehoorn Je posterai un post-it pour me rappeler: P
Joshua Parnell
@JoelCoehoorn Voici votre @ réponse. Désolé, il a fallu si longtemps, l'aplomb l'a oublié.
Joshua Parnell
Cela fonctionne bien, mais fonctionne très lentement: il faut plus de 20 secondes pour terminer sur mon PC rapide et raisonnable.
Mozzis
4

Je ne sais pas si vous pouvez définir l'ordre du cache pour les icônes, car il pourrait constamment changer si de nouveaux programmes étaient ajoutés, mais vous pouvez définir la notification sur "Toujours afficher toutes les icônes et notifications dans la barre des tâches".

Pour définir cela comme valeur par défaut, accédez à cette clé de registre:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer

Ajoutez la valeur DWORD " EnableAutoTray", double-cliquez dessus et définissez la valeur hexadécimale sur " 0".

J'ai testé cela et cela a fonctionné.

Note intéressante: j'ai d'abord essayé de l'ajouter à cette clé:

HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer

J'ai toujours pensé que c'était le registre par défaut pour les nouveaux utilisateurs, mais cela n'a pas fonctionné. Je suis donc allé chercher et j'ai trouvé cet article intéressant brisant mes pensées de longue date sur cette clé .DEFAULT.

http://blogs.msdn.com/b/oldnewthing/archive/2007/03/02/1786493.aspx

Addition: Le mieux que je puisse dire, c'est que les entrées de registre sont là. Si vous deviez essayer de définir une icône comme vous le feriez si vous ouvriez " Control Panel\All Control Panel Items\Notification Area Icons":

HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify

Si vous les regardez, ils ne sont pas très compréhensibles, donc je ne sais pas dans quelle mesure vous feriez pour les éditer.

Je suggère que vous envisagiez de créer un nouvel utilisateur et son profil, définissez le "Panneau de configuration \ Tous les éléments du Panneau de configuration \ Icônes de la zone de notification" pour cette icône (au moins) sur "Afficher l'icône et les notifications".

Redémarrez ensuite pour libérer le profil et connectez-vous en tant qu'administrateur. Copiez ce profil dans le C:\Users\Defaultprofil " ". Vous pouvez le faire manuellement à l'aide de l'Explorateur ou de la façon dont nous le faisions dans " Control Panel\All Control Panel Items\System" " Advanced System Settings>Advanced>User Profiles>Copy to". Il sera grisé, mais vous pouvez utiliser Windows Enabler pour contourner ce problème .

KCotreau
la source
Je préfère ne pas afficher toutes les icônes, mais je le ferai si je le dois.
Joel Coehoorn
Je vais ajouter à la réponse.
KCotreau
J'ai vu Windows Enabler et d'autres solutions de profils de copie, mais l'expérimentation a montré que cela est vraiment cassé pour Windows 7. Cela me rend triste :(
Joel Coehoorn
Je suis d'accord Joel, POURQUOI désactiveraient-ils cette fonction? Je n'ai encore aucune idée autre que des gens qui essaient de le copier au mauvais endroit.
KCotreau
@KCotreau: C'était sur les blogs de Windows Deployment. Cela a quelque chose à voir avec certaines opérations qui ne se produisent que lors de la création du profil, c'est-à-dire "Préparation de votre bureau ..." Franchement, ça craint, mais je peux voir pourquoi ils essaient d'éloigner tout le monde de cette méthode. Il est tout simplement imprévisible quels seront les résultats finaux.
surfasb
1

Exécutez ceci en tant qu'administrateur:

Set-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer EnableAutoTray 0

Remarquez le HKLM au lieu de HKCU .

Vérifiez l'effet avec:

ps explorer | kill

Il affiche toutes les icônes pour tous les profils.

majkinetor
la source
1
#this will grab all the SID on current user and apply across all.
Function Enable-Notifications
{
    Param
        (
        [parameter(Mandatory=$false)][string]$cpuName
        )


        if (Test-Connection $cpuName -Quiet)    
        {
Try
                {
                    $serviceName = "Remote Registry"  
                    Get-Service -ComputerName $cpuName -Name $serviceName | Start-Service
                }
                Catch
                {
                    Write-Host "Possible Error restarting $serviceName on $cpuName" -ForegroundColor Red
                }
                Try
                {
                    $root = [Microsoft.Win32.RegistryHive]::Users
                    $regKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($root, $cpuName)

                    $users = $regKey.GetSubKeyNames() | where { $_.Length -gt 10 -and $_.EndsWith("_Classes") -eq $false }
                    foreach ($usersid in $users)
                    {
                        $key = "$usersid\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer"
                        $regKey = $regKey.OpenSubKey($key, $true)
                        $regKey.SetValue("EnableAutoTray", "0", 'DWORD')
                    }
                    $ActiveUser = ([Environment]::UserDomainName + "\" + [Environment]::UserName)
                    $Time = Get-Date -format "MM-dd-yyyy @ HH:mm"
                    $WriteOut = "$ActiveUser enabled Notifcations on $cpuName at $Time"
                    $WriteOut >> "c:\scripts\Notification-Update-Enable.csv"
                    Write-Host "Enable Notifications on $cpuName" -ForegroundColor Green
                }       
                Catch
                {
                    $errormsg = $cpuName + ” is down/not responding.”
                    Write-Host $errorMsg -ForegroundColor Red
                    $errormsg >> "c:\scripts\Notification-Update-Enable_Off.csv"
                }
}
        else
        {
            Write-Host "$cpuName is Offline. Try again later." -ForegroundColor Red
            $errormsg >> "c:\scripts\Notification-Update-Enable_Off.csv"
        }
}
Paul
la source
Pour info, il y a un wrapper de format de bloc de code pour que vous n'ayez pas à utiliser <br>sur chaque ligne.
Enigma
0

il est désormais disponible dans les versions ultérieures de la stratégie de groupe, voir l'option B

Toutes ces options sont disponibles en User Configuration\Administrative Templates\Start Menu and Taskbar

Vous pouvez soit:

A) Éteignez-le complètement ou allumez-le complètement ("masquer la zone de notification", fonctionne pour XP et 7)

B) Faites-le afficher tout ou continuez à afficher les icônes spécifiées par l'utilisateur ("désactiver le nettoyage de la zone de notification, "fonctionne à la fois pour XP et 7)

C) Désactivez uniquement certaines icônes incluses dans le GPO par défaut, comme Action Center, Networking, Battery Meter, Volume. Pour autant que je sache, ce sont les 4 seules icônes de zone de notification avec lesquelles vous pouvez travailler via le GPO 2008R2 par défaut (et cela ne fonctionne que pour Vista et supérieur ou 7 et supérieur).

technonath
la source
1
Donc, ce que j'ai demandé n'est pas disponible via la stratégie de groupe, car je veux forcer une icône spécifique à toujours s'afficher, et ce n'est pas l'une des options de GPO décrites ici.
Joel Coehoorn