L'icona della barra delle applicazioni specifica mostra sempre tutti i profili in Windows 7


13

Sto installando una macchina Windows 7 che siederà all'aperto e sarà condivisa da molte persone. Ho aggiunto un collegamento al menu di avvio di tutti gli utenti per eseguire un programma che si trova nella barra delle applicazioni. Voglio che l'icona della barra delle applicazioni di questo programma sia sempre visibile per impostazione predefinita, indipendentemente da chi accede. Un utente può disattivarlo sul proprio profilo se lo desidera, ma ne ho bisogno almeno per iniziare impostato come sempre visibile. Come posso fare questo?

Preferirei non mostrare tutte le icone, in parte per lo stesso motivo per cui sono nascoste in primo luogo: non voglio il disordine. Inoltre, poiché si tratta di un computer pubblico, è in esecuzione un altro programma chiamato DeepFreeze che ha anche un'icona nella barra delle applicazioni, e non voglio che quell'icona mostri sempre.


Non riesci a mostrare l'icona / messaggio con un meccanismo diverso dalla barra delle applicazioni?
jalf

Risposte:


11

In poche parole, al momento, non puoi farlo.

Non ci sono criteri di gruppo o preferenze per impostare questo, e il modo in cui tiene traccia lo rende specifico per l'utente corrente e il sistema, rendendo le 'impostazioni' molto diverse da istanza a istanza.

Essi sono memorizzati qui (nel Registro di sistema), se si desidera di check it out: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify.

Da qui :

Non è possibile che le applicazioni si mostrino sempre a livello di codice al livello superiore sulla barra delle applicazioni alla prima installazione o in qualsiasi momento durante il runtime. Questa è una delle numerose modifiche che abbiamo apportato in Windows 7 nel tentativo di produrre un desktop più pulito e silenzioso che è sotto il controllo dell'utente per personalizzare il livello superiore con le loro applicazioni e icone preferite.

Manteniamo l'utente nel controllo dell'area di notifica non consentendo la promozione programmatica (se non temporaneamente o per mostrare una notifica). Supponendo che la macchina sia sufficientemente silenziosa, quando aggiungi per la prima volta la tua icona con Shell_NotifyIcon (NIM_ADD, ...) verrà mostrata sulla barra delle applicazioni per 45 secondi, quindi passerà allo overflow in seguito. Se l'utente promuove un'icona, vivrà sempre sulla barra delle applicazioni. Se l'utente lo declassa, l'icona non verrà mai visualizzata sulla barra delle applicazioni. Ogni promozione deve essere avviata dall'utente. Abbiamo reso tutto molto più semplice in Windows 7 tramite trascinamento della selezione e tramite il pannello di controllo delle icone dell'area di notifica e ciò che abbiamo visto negli studi di usabilità e basato sul feedback beta è che gli utenti non hanno difficoltà a scoprire come personalizzare il comportamento delle notifiche e promuoverà le icone a cui desiderano accedere rapidamente.

La tua scommessa più semplice è mostrare TUTTE le icone dell'area di notifica per tutti gli utenti. Questo può essere fatto aggiungendo una (semplice) voce di registro:

In HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorercrea un nuovo valore DWORD denominato EnableAutoTraye impostalo su 0per disattivare le funzioni di "auto hide" dell'area di notifica.

Con alcune configurazioni e script OU è possibile utilizzarlo anche in un contesto HKCU, se si desidera che accada solo per determinati utenti / gruppi.

Vedi qui per maggiori informazioni a riguardo.


Preferirei non mostrare tutte le icone, ma lo farò se dovessi.
Joel Coehoorn,

10

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 msconfige 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


Sono fuori dall'ufficio per un po 'e quando torno me ne sarò dimenticato. Se riesci a rispondere a questo commento alla fine della prossima settimana, potrò dare un'occhiata più da vicino e magari cambiare la risposta accettata.
Joel Coehoorn,

Le risposte di solo collegamento sono un no-no a causa di possibili futuri rot-link. Includi le informazioni pertinenti nella tua risposta. Inoltre non ci importa se hai risposto a una vecchia domanda, in realtà è una buona cosa, quindi ti preghiamo di considerare di rimuovere le tue "scuse" e i motivi per la pubblicazione. :)
Ƭᴇcʜιᴇ007,

@ techie007 Grazie, a cura di Joel Coehoorn, posterò una nota adesiva per ricordarmi: P
Joshua Parnell,

@JoelCoehoorn Ecco la tua risposta @. Mi dispiace che ci sia voluto tanto tempo, il piombo se ne è dimenticato.
Joshua Parnell,

Funziona bene, ma funziona molto lentamente: richiede> 20 secondi per completare sul mio PC veloce ragionevole.
Mozzis,

4

Non so se è possibile impostare l'ordine della cache per le icone considerando che potrebbe cambiare costantemente se fossero stati aggiunti nuovi programmi, ma è possibile impostare la notifica su "Mostra sempre tutte le icone e le notifiche sulla barra delle applicazioni".

Per impostare questo come predefinito, vai a questa chiave di registro:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer

Aggiungi il valore DWORD " EnableAutoTray", fai doppio clic su di esso e imposta il valore esadecimale su " 0".

Ho provato questo e ha funzionato.

Nota interessante: ho prima provato ad aggiungerlo a questa chiave:

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

Ho sempre pensato che fosse il registro predefinito per i nuovi utenti, ma non ha funzionato. Quindi sono andato a cercare e ho trovato questo interessante articolo che mi ha spezzato i pensieri di lunga data su quella chiave .DEFAULT.

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

Aggiunta: la cosa migliore che posso dire è che le voci di registro sono qui Se avessi intenzione di provare a impostare un'icona come faresti se aprissi " Control Panel\All Control Panel Items\Notification Area Icons":

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

Se li guardi, non sono molto comprensibili, quindi non sono sicuro di come li modificheresti.

Suggerisco di prendere in considerazione la possibilità di creare un nuovo utente e il suo profilo, impostare "Pannello di controllo \ Tutti gli elementi del pannello di controllo \ Icone dell'area di notifica" per quell'icona (almeno) su "Mostra icona e notifiche".

Quindi riavviare per rilasciare il profilo e accedere come amministratore. Copia quel profilo nel profilo " C:\Users\Default". Puoi farlo manualmente usando Explorer, o il modo in cui lo facevamo in " Control Panel\All Control Panel Items\System" " Advanced System Settings>Advanced>User Profiles>Copy to". Verrà visualizzato in grigio, ma è possibile utilizzare l' Enabler di Windows per aggirare il problema .


Preferirei non mostrare tutte le icone, ma lo farò se dovessi.
Joel Coehoorn,

Ho intenzione di aggiungere alla risposta.
KCotreau,

Ho visto l'Enabler di Windows e altre soluzioni per il profilo delle copie, ma la sperimentazione ha dimostrato che questo è veramente rotto per Windows 7. Mi rende triste :(
Joel Coehoorn il

Accetto Joel, PERCHÉ disabiliterebbero quella funzione? Non ho ancora idea diversa dalle persone che cercano di copiarlo nel posto sbagliato.
KCotreau,

@KCotreau: era sui blog di distribuzione di Windows. Ha a che fare con determinate operazioni che avvengono solo durante la creazione del profilo, ad esempio "Preparazione del desktop ..." Francamente fa schifo, ma posso vedere perché stanno cercando di allontanare tutti da questo metodo. È semplicemente imprevedibile quali saranno i risultati finali.
surfasb,

1

Esegui come admin:

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

Notare HKLM invece HKCU .

Verifica l'effetto con:

ps explorer | kill

Mostra tutte le icone per tutti i profili.


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"
        }
}

Cordiali saluti, esiste un wrapper di formato a blocchi di codice, quindi non è necessario utilizzarlo <br>su ogni riga.
Enigma

0

è ora disponibile nelle versioni successive dei criteri di gruppo, vedere l'opzione B

Tutte queste opzioni sono disponibili in User Configuration\Administrative Templates\Start Menu and Taskbar

Puoi:

A) Spegnilo completamente o accendilo completamente ("nascondi l'area di notifica", funziona sia per XP che per 7)

B) Avere mostra tutto o continua a mostrare le icone che l'utente specifica ("disattiva la pulizia dell'area di notifica, "funziona sia per XP che per 7)

C) Disabilita solo alcune icone incluse nell'oggetto Criteri di gruppo predefinito, come Centro operativo , Rete, Indicatore livello batteria, Volume. Per quanto ne so, queste sono le uniche 4 icone dell'area di notifica con cui puoi lavorare tramite l'oggetto Criteri di gruppo 2008R2 predefinito (e queste funzionano solo per Vista e versioni successive o 7 e versioni successive).


1
Quindi, ciò che ho chiesto non è disponibile tramite i criteri di gruppo, poiché voglio forzare un'icona specifica da mostrare sempre, e questa non è una delle opzioni dell'oggetto Criteri di gruppo qui descritte.
Joel Coehoorn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.