Stavo cercando online e in realtà ho trovato questo 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/
lunga storia, creare 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[]] [email protected]()
$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
}
}
Salva come file PS1 utilizzando il nome di vostra scelta.
Aprire MMC Gestione criteri di gruppo. Seleziona l'oggetto Criteri di gruppo scelto, fai clic con il tasto destro e seleziona Modifica. Nell'editor, accedere a Configurazione utente> Impostazioni di Windows> Script> Accesso e fare clic su "Proprietà dello schermo". Vai alla scheda PowerShell e fai clic su Visualizza file.
Copia lo script appena creato nella finestra di Esplora risorse appena aperta e quindi chiusa fuori dalla finestra.
Nella finestra delle proprietà dello script di accesso, aggiungere un nuovo script PowerShell, nel nome dello script, immettere il nome dello script utilizzato (esempio: NotifyIcon.ps1), quindi nei parametri, immettere il nome del programma (caso ! sensitive) seguita dalla impostazione per utilizzare:
0 = Mostra solo le notifiche 1 = nascondere icone e notifiche 2 = Mostra icona e notifiche < --- quello che vi serve
esempio, se avete bisogno di RealVNC server sempre visualizzato, immettere:
winvnc4.exe 2
le paramenters
È possibile trovare il nome del file eseguibile in un paio di modi diversi, come l'apertura di una finestra di dialogo Esegui e digitando msconfig e guardando i programmi di avvio, manualmente la navigazione verso la directory di installazione C : \ Programmi {il tuo programma}, o cercando di abbinare il programma desiderato osservando i processi in esecuzione in Task Manager. 9 volte su 10 questo si tradurrà in successo.
Affinché questo funzioni, l'utente deve aver eseguito in precedenza 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. In un accesso successivo, lo script dovrebbe localizzare con successo il programma nella cronologia e aggiornarne le impostazioni per visualizzarlo 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 lo sovrascriverà quando smetterà.
Non prendo alcun merito per questo processo. Non l'ho scritto, l'ho appena trovato. Il merito per la sceneggiatura va a Micah Rowland. Il credito per il processo GPO va a Geoff Kendal
Non abbastanza reputazione da collegare agli autori originali, con l'eccezione di quello in alto.
L'assegnazione dello stato di "sempre visibile" alle icone dell'area di notifica è una scelta effettuata dall'utente tramite la finestra di dialogo delle proprietà della barra delle applicazioni. Sarei sorpreso se Windows esponesse un'interfaccia programmatica ad esso. – Jon
Sì, e normalmente non proverei a forzarlo sull'utente. Ma è fondamentale che facciano uno screenshot che non è coperto dalla finestra di icone inattiva. – Drake
Quindi possono entrare in "Personalizza ..." e dire che vogliono che quell'icona sia sempre visibile. –