Stavo cercando online e in realtà l'ho trovato a caso.
Per farla breve, una combinazione di PowerShell (script fornito) e GPO.
http://4sysops.com/archives/forcing-notification-area-icons-to-always-show-in-windows-7-or-windows-8/
Per farla breve, crea uno script PowerShell contenente quanto segue:
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
}
}
Salvalo come file ps1 usando il nome che preferisci.
Aprire MMC Gestione criteri di gruppo. Seleziona l'oggetto Criteri di gruppo selezionato, fai clic con il pulsante destro del mouse e seleziona Modifica. Nell'editor, seleziona Configurazione utente> Impostazioni di Windows> Script> Accesso e fai clic su "Proprietà dello schermo". Vai alla scheda PowerShell e fai clic su Visualizza file.
Copia lo script appena creato nella finestra di Explorer che si è appena aperta e quindi chiudi la finestra.
Nella finestra delle proprietà dello script di accesso, aggiungi un nuovo script PowerShell, nel nome dello script, inserisci il nome dello script che hai utilizzato (esempio: NotifyIcon.ps1), quindi nei parametri, inserisci il nome del programma (case sensitive!) Seguito dall'impostazione per utilizzare:
0 = mostra solo le notifiche 1 = nascondi icona e notifiche 2 = mostra icona e notifiche <--- Quello che ti serve
Esempio, se è necessario che il server RealVNC appaia sempre, inserire:
winvnc4.exe 2
come i paramenters
Puoi scoprire il nome dell'eseguibile in un paio di modi diversi, come aprire una finestra di dialogo Esegui e digitare msconfig
e guardare i programmi di avvio, navigare manualmente nella directory di installazione C:\Program Files\{your program}
o cercare di abbinare il programma desiderato guardando il programma processi in Task Manager. 9 volte su 10 questo si tradurrà in successo.
Affinché ciò funzioni, l'utente deve aver precedentemente eseguito l'applicazione e quindi disconnesso correttamente, in modo che explorer.exe abbia la possibilità di scrivere la cronologia dell'area di notifica aggiornata nel Registro di sistema. Al successivo accesso, lo script dovrebbe individuare correttamente il programma nella cronologia e aggiornarne le impostazioni per mostrarlo sempre.
Puoi anche provare a eseguire manualmente lo script da un prompt di PowerShell per eseguire il debug, ma DEVI uccidere explorer.exe ('taskkill / f / im explorer.exe') prima di eseguirlo, altrimenti explorer non vedrà il tuo aggiornamento e sovrascriverà quando si chiude.
Non mi merito per questo processo. Non l'ho scritto, l'ho appena trovato. Il merito della sceneggiatura va a Micah Rowland . Il merito del processo GPO va a Geoff Kendal