Haga que el icono de la bandeja específica siempre se muestre para todos los perfiles en Windows 7

13

Estoy configurando una máquina con Windows 7 que se mantendrá abierta y será compartida por mucha gente. He agregado un acceso directo al menú de inicio de todos los usuarios para ejecutar un programa que se encuentra en la bandeja del sistema. Quiero que el icono de la bandeja para este programa siempre esté visible de forma predeterminada, sin importar quién inicie sesión. Un usuario puede desactivarlo en su perfil si realmente lo desea, pero necesito que al menos comience como siempre visible. ¿Cómo puedo hacer esto?

Prefiero no mostrar todos los íconos, en parte por la misma razón por la que están ocultos en primer lugar: no quiero el desorden. Además, como se trata de una computadora pública, hay otro programa llamado DeepFreeze en ejecución que también tiene un ícono de bandeja de sistema, y ​​no quiero que ese ícono se muestre todo el tiempo.

Joel Coehoorn
fuente
¿No puede mostrar el icono / mensaje por algún otro mecanismo que no sea en la bandeja del sistema?
jalf

Respuestas:

11

En pocas palabras, actualmente, no puedes hacer esto.

No existe una Política de grupo o Preferencia para configurar esto, y la forma en que realiza un seguimiento lo hace específico para el usuario actual y el sistema, lo que hace que la 'configuración' varíe mucho de una instancia a otra.

Se almacenan aquí (en el Registro) si quieres echarle un vistazo: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify.

Desde aquí :

No hay forma de que las aplicaciones siempre se muestren programáticamente a nivel superior en la bandeja del sistema, ya sea en la primera instalación o en cualquier momento durante el tiempo de ejecución. Este es uno de los varios cambios que hemos realizado en Windows 7 en un esfuerzo por producir un escritorio más limpio y silencioso que esté bajo el control del usuario para personalizar el nivel superior con sus aplicaciones e íconos favoritos.

Mantenemos al usuario en control del área de notificación al no permitir la promoción programática (que no sea temporalmente o para mostrar una notificación). Suponiendo que la máquina esté lo suficientemente silenciosa, cuando agregue su icono por primera vez con Shell_NotifyIcon (NIM_ADD, ...), se mostrará en la barra de tareas durante 45 segundos y luego pasará al desbordamiento. Si el usuario promueve un icono, siempre estará en la barra de tareas. Si el usuario lo degrada, el icono nunca se verá en la barra de tareas. Cualquier promoción debe ser iniciada por el usuario. Hemos hecho esto mucho más fácil en Windows 7 mediante arrastrar / soltar y a través del panel de control de los iconos del área de notificación, y lo que hemos visto en los estudios de usabilidad y en base a los comentarios beta es que los usuarios no tienen dificultades para descubrir cómo personalizar el comportamiento de las notificaciones y promocionará los íconos a los que desean acceder rápidamente.

La apuesta más fácil es mostrar TODOS los íconos del área de notificación para todos los usuarios. Esto se puede hacer agregando una entrada de registro (simple):

En HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorercrear un nuevo valor DWORD llamado EnableAutoTrayy configurarlo 0para desactivar las funciones de 'ocultación automática' del área de notificación.

Con algunas configuraciones y secuencias de comandos de OU, también puede usarlo en un contexto HKCU, si solo desea que suceda para ciertos usuarios / grupos.

Vea aquí para más información sobre eso.

Ƭᴇcʜιᴇ007
fuente
Prefiero no mostrar todos los íconos, pero lo haré si debo hacerlo.
Joel Coehoorn
10

Estaba buscando en línea y realmente encontré esto al azar.

Larga historia corta, una combinación de PowerShell (script proporcionado) y GPO.

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

Larga historia, cree un script de PowerShell que contenga lo siguiente:

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

Guárdelo como un archivo ps1 con el nombre que elija.

Abra el MMC de administración de directivas de grupo. Seleccione su Objeto de directiva de grupo elegido, haga clic derecho y seleccione Editar. En el editor, navegue a Configuración de usuario> Configuración de Windows> Scripts> Inicio de sesión y haga clic en "Propiedades de pantalla". Vaya a la pestaña PowerShell y haga clic en Ver archivos.

Copie la secuencia de comandos que acaba de crear en la ventana del Explorador que acaba de abrir y luego cierre la ventana.

En la ventana de propiedades del script de inicio de sesión, agregue un nuevo script de PowerShell, en el nombre del script, ingrese el nombre del script que utilizó (ejemplo: NotifyIcon.ps1), y luego en los parámetros, ingrese el nombre del programa (distingue entre mayúsculas y minúsculas) seguido por la configuración a usar:

0 = solo mostrar notificaciones 1 = ocultar íconos y notificaciones 2 = mostrar íconos y notificaciones <--- El que necesita

Ejemplo, si necesita que el servidor RealVNC siempre aparezca, debe ingresar:

winvnc4.exe 2

como los paramenters

Puede encontrar el nombre del ejecutable de dos maneras diferentes, como abrir un cuadro de diálogo Ejecutar y escribir msconfigy mirar los programas de inicio, navegar manualmente al directorio de instalación C:\Program Files\{your program}o tratar de hacer coincidir el programa deseado mirando la ejecución procesos en el Administrador de tareas. 9 de cada 10 veces esto dará como resultado el éxito.

Para que esto funcione, el usuario debe haber ejecutado previamente la aplicación y luego cerrar sesión correctamente, de modo que explorer.exe tenga la oportunidad de escribir el historial actualizado del área de notificación en el Registro. En un inicio de sesión posterior, el script debe ubicar con éxito el programa en el historial y actualizar su configuración para que siempre se muestre.

También puede intentar ejecutar el script manualmente desde un indicador de PowerShell para depurar, pero DEBE matar a explorer.exe ('taskkill / f / im explorer.exe') antes de ejecutarlo; de lo contrario, el explorador no verá su actualización y sobrescribirá cuando deja de fumar.

No me atribuyo crédito por este proceso. No lo escribí, solo lo encontré. El crédito por el guión es para Micah Rowland . El crédito para el proceso de GPO va a Geoff Kendal

Joshua Parnell
fuente
Estoy fuera de la oficina por un tiempo, y para cuando regrese me habré olvidado de esto. Si puede responder este comentario a fines de la próxima semana, podré examinarlo más de cerca y tal vez cambiar la respuesta aceptada.
Joel Coehoorn
Las respuestas de solo enlace son un no-no debido a la posible descomposición futura de enlaces. Incluya información pertinente en su respuesta. Tampoco nos importa si respondiste una pregunta anterior, en realidad es algo BUENO, así que considera eliminar tu "disculpa" y las razones para publicar. :)
Ƭᴇcʜιᴇ007
@ techie007 Gracias, editado @ Joel Coehoorn Publicaré una nota adhesiva para recordarme: P
Joshua Parnell
@JoelCoehoorn Aquí está tu @ respuesta. Lo siento, tomó tanto tiempo, la plomada lo olvidó.
Joshua Parnell
Funciona bien, pero funciona muy lento: tarda> 20 segundos en completarse en mi PC rápida razonable.
Mozzis
4

No sé si puede establecer el orden de la caché para los iconos, ya que podría cambiar constantemente si se agregaran nuevos programas, pero puede configurar la notificación para "Mostrar siempre todos los iconos y notificaciones en la barra de tareas".

Para configurar esto como predeterminado, vaya a esta clave de registro:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer

Agregue el valor DWORD " EnableAutoTray", haga doble clic en él y establezca el valor hexadecimal en " 0".

Probé esto y funcionó.

Nota interesante: primero intenté agregarlo a esta clave:

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

Siempre he pensado que ese era el registro predeterminado para nuevos usuarios, pero no funcionó. Así que fui a buscar y encontré este interesante artículo que revienta mis pensamientos de larga data sobre esa clave .DEFAULT.

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

Además: lo mejor que puedo decir es que las entradas del registro están aquí. Si fuera a intentar establecer un ícono como lo haría si abriera " Control Panel\All Control Panel Items\Notification Area Icons":

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

Si los miras, no son muy comprensibles, por lo que no estoy seguro de qué tan bien harías al editarlos.

Le sugiero que considere crear un nuevo usuario y su perfil, configure el "Panel de control \ Todos los elementos del panel de control \ Iconos del área de notificación" para ese icono (al menos) en "Mostrar icono y notificaciones".

Luego reinicie para liberar el perfil e inicie sesión como administrador. Copie ese perfil al perfil " C:\Users\Default". Puede hacerlo manualmente utilizando Explorer, o la forma en que solíamos hacerlo en " Control Panel\All Control Panel Items\System" " Advanced System Settings>Advanced>User Profiles>Copy to". Aparecerá en gris, pero puede usar Windows Enabler para evitarlo .

KCotreau
fuente
Prefiero no mostrar todos los íconos, pero lo haré si debo hacerlo.
Joel Coehoorn
Voy a agregar a la respuesta.
KCotreau
He visto Windows Enabler y otras soluciones de perfil de copia, pero la experimentación ha demostrado que esto realmente está roto para Windows 7. Me entristece :(
Joel Coehoorn
Estoy de acuerdo, Joel, ¿por qué deshabilitarían esa función? Todavía no tengo otra idea que las personas que intentan copiarlo en el lugar equivocado.
KCotreau
@KCotreau: Estaba en los blogs de implementación de Windows. Tiene algo que ver con ciertas operaciones que ocurren solo durante la creación del perfil, es decir, "Preparar su escritorio ...". Francamente, apesta, pero puedo ver por qué están tratando de alejar a todos de este método. Es simplemente impredecible cuáles serán los resultados finales.
surfasb
1

Ejecuta esto como administrador:

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

Observe el HKLM en su lugar HKCU .

Verificar efecto con:

ps explorer | kill

Muestra todos los iconos para todos los perfiles.

majkinetor
fuente
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"
        }
}
Pablo
fuente
Para su información, hay un contenedor de formato de bloque de código para que no tenga que usarlo <br>en cada línea.
Enigma
0

ahora está disponible en versiones posteriores de la política de grupo, consulte la opción B

Todas estas opciones están disponibles en User Configuration\Administrative Templates\Start Menu and Taskbar

Tu también puedes:

A) Desactívela por completo o actívela por completo ("ocultar el área de notificación" funciona tanto para XP como para 7)

B) Haga que muestre todo o continúe mostrando los íconos que el usuario especifique ("desactive la limpieza del área de notificación, "funciona tanto para XP como para 7)

C) Desactiva solo ciertos íconos incluidos en el GPO predeterminado, como Centro de actividades, Redes, Medidor de batería, Volumen. Por lo que puedo decir, esos son los únicos 4 íconos del Área de notificación con los que puede trabajar a través del GPO 2008R2 predeterminado (y estos solo funcionan para Vista y superior o 7 y superior).

tecnonath
fuente
1
Entonces, lo que pregunté no está disponible a través de la política de grupo, ya que quiero forzar que se muestre siempre un ícono específico, y esa no es una de las opciones de GPO descritas aquí.
Joel Coehoorn