Je suis en train de mettre en place une machine Windows 7 qui sera partagée et partagée par beaucoup de gens. J'ai ajouté un raccourci au menu de démarrage de tous les utilisateurs pour exécuter un programme situé dans la barre d'état système. Je veux que l’icône de la barre des tâches de ce programme soit toujours visible par défaut, quel que soit le qui se connecte. Un utilisateur peut le désactiver sur son profil s’il le souhaite vraiment, mais j’en ai au moins besoin pour commencer défini comme toujours visible. Comment puis-je faire ceci?
Je préférerais 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 le fouillis. En outre, comme il s’agit d’un ordinateur public, un autre programme appelé DeepFreeze est également en cours d’exécution et comporte une icône dans la zone de notification, et je ne souhaite pas que cette icône soit affichée en permanence.
En bref, 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 cela est gardé 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 la base de registres) si vous voulez les vérifier: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify
.
De ici :
Il n’ya aucun moyen pour les applications de s’afficher systématiquement par programme dans la zone de notification, que ce soit lors de la première installation ou à tout moment de l’exécution. C’est l’une des nombreuses modifications apportées à Windows 7 dans le but de créer un bureau plus propre et plus silencieux, sous le contrôle de l’utilisateur, afin de personnaliser le niveau supérieur avec ses 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 par programme (autre que temporairement ou pour afficher une notification). En supposant que la machine soit suffisamment silencieuse, lorsque vous ajoutez pour la première fois votre icône avec Shell_NotifyIcon (NIM_ADD, ...), elle sera affichée dans la barre des tâches pendant 45 secondes, puis passera au débordement par la suite. Si l'utilisateur promeut une icône, celle-ci sera toujours affichée dans la barre des tâches. Si l'utilisateur le rétrograde, l'icône ne sera jamais vue dans la barre des tâches. Toute promotion doit être lancée par l'utilisateur. Ceci est beaucoup plus facile sous Windows 7 par glisser-déposer et par le biais du panneau de configuration Icônes de la zone de notification. Ce que nous avons vu dans les études d'utilisabilité et basé sur les commentaires bêta, est que les utilisateurs n'ont aucune difficulté à découvrir comment personnaliser le comportement des notifications. et fera la promotion des icônes auxquelles ils souhaitent un accès rapide.
Votre meilleur choix consiste à afficher TOUTES les icônes de la zone de notification pour tous les utilisateurs. Cela peut être fait en ajoutant une (simple) entrée de registre:
Dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer
, créez une nouvelle valeur DWORD nommée EnableAutoTray
et définissez-la sur 0
pour désactiver les fonctionnalités de "masquage automatique" de la zone de notification.
Avec certaines configurations d’UO et de script, vous pouvez également les utiliser dans un contexte HKCU, si vous souhaitez que cela se produise uniquement pour certains utilisateurs/groupes.
Voir ici pour plus d'informations à ce sujet.
Je cherchais en ligne et ai effectivement trouvé cela au hasard.
Longue histoire courte, une combinaison de PowerShell (script fourni) et GPO.
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 de gestion des stratégies de groupe. Sélectionnez l'objet de stratégie de groupe choisi, cliquez avec le bouton droit de la souris et sélectionnez Modifier. Dans l'éditeur, accédez à Configuration utilisateur> Paramètres Windows> Scripts> Connexion, puis 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!), Puis par le paramètre à utiliser:
0 = afficher uniquement les notifications 1 = masquer les icônes et notifications 2 = afficher les icônes et notifications <--- Celui dont vous avez besoin
Par exemple, si vous avez besoin que le serveur RealVNC apparaisse toujours, entrez:
winvnc4.exe 2
comme les paramenters
Vous pouvez connaître le nom de l'exécutable de différentes manières, par exemple en ouvrant une boîte de dialogue Exécuter et en saisissant msconfig
, en parcourant les programmes de démarrage, en naviguant manuellement vers le répertoire d'installation C:\Program Files\{your program}
ou en essayant de faire correspondre le programme souhaité. les processus en cours d'exécution dans le Gestionnaire des tâches. 9 fois sur 10, le succès sera au rendez-vous.
Pour que cela fonctionne, l'utilisateur doit avoir préalablement exécuté l'application, puis correctement déconnecté, 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 devrait localiser avec succès le programme dans l'historique et mettre à jour ses paramètres pour qu'il soit toujours affiché.
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 Explorer ne verra pas votre mise à jour et écrasera ça quand ça s'arrête.
Je ne prends aucun crédit pour ce processus. Je ne l'ai pas écrit, je l'ai juste trouvé. Le crédit du script va à Micah Rowland . Le crédit pour le processus GPO va à Geoff Kendal
Je ne sais pas si vous pouvez définir l'ordre du cache pour les icônes, sachant qu'il pourrait être constamment modifié si de nouveaux programmes étaient ajoutés, mais vous pouvez définir la notification sur "Toujours afficher toutes les icônes et les notifications dans la barre des tâches".
Pour que ce soit la 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é. Alors je suis allé chercher et j'ai trouvé cet article intéressant qui dérangeait mes réflexions de longue date sur cette clé .DEFAULT.
http://blogs.msdn.com/b/oldnewthing/archive/2007/03/02/1786493.aspx
Ajout: Le meilleur que je puisse dire est que les entrées de registre sont ici Si vous alliez 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, je ne suis donc pas sûr de pouvoir les éditer.
Je vous suggère d’envisager de créer un nouvel utilisateur et son profil, définissez l'option "Panneau de configuration\Tous les éléments du panneau de configuration\Zone de notification" pour cette icône (au moins) sur "Afficher les icônes et les notifications".
Ensuite, redémarrez pour libérer le profil et connectez-vous en tant qu'administrateur. Copiez ce profil dans le profil "C:\Users\Default
". Vous pouvez le faire soit manuellement à l'aide de l'Explorateur, soit de la manière que nous utilisions auparavant dans "Control Panel\All Control Panel Items\System
" "" Advanced System Settings>Advanced>User Profiles>Copy to
". Il sera grisé, mais vous pouvez utiliser le Windows Enabler pour contourner cela.
#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"
}
}
Exécutez ceci en tant qu'administrateur:
Set-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer EnableAutoTray 0
Notez le HKLM à la place HKCU.
Vérifier l'effet avec:
ps Explorer | kill
Il montre toutes les icônes pour tous les profils.
il est maintenant disponible dans la stratégie de groupe des versions ultérieures, voir option B
Toutes ces options sont disponibles dans User Configuration\Administrative Templates\Start Menu and Taskbar
Tu peux soit:
A) Éteignez-le complètement ou allumez-le complètement (l'option "Masquer la zone de notification" fonctionne pour XP et 7)
B) Demandez-lui de tout afficher, ou continuez d'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 l'objet de stratégie de groupe par défaut, telles que Centre de maintenance, Réseau, Jauge de batterie, Volume. Autant que je sache, ce sont les 4 icônes de zone de notification que vous pouvez utiliser avec le paramètre par défaut 2008R2 GPO (et celles-ci ne fonctionnent que pour Vista et versions ultérieures ou 7 et versions ultérieures).