In Windows 7 wird für alle Profile immer ein bestimmtes Taskleistensymbol angezeigt


12

Ich richte eine Windows 7-Maschine ein, die offen steht und von vielen Leuten geteilt wird. Ich habe eine Verknüpfung zum Startmenü aller Benutzer hinzugefügt, um ein Programm auszuführen, das sich in der Taskleiste befindet. Ich möchte, dass das Taskleistensymbol für dieses Programm immer standardmäßig angezeigt wird, unabhängig davon, wer sich anmeldet. Ein Benutzer kann es in seinem Profil deaktivieren, wenn er es wirklich möchte, aber ich möchte, dass es als immer sichtbar festgelegt wird. Wie kann ich das machen?

Ich würde lieber nicht alle Symbole anzeigen, zum Teil aus dem gleichen Grund, weil sie an erster Stelle verborgen sind: Ich möchte keine Unordnung. Da es sich um einen öffentlichen Computer handelt, gibt es ein anderes Programm namens DeepFreeze, das ebenfalls über ein Taskleistensymbol verfügt. Ich möchte nicht, dass dieses Symbol ständig angezeigt wird.


Können Sie das Symbol / die Nachricht nicht auf eine andere Weise als in der Taskleiste anzeigen?
2.

Antworten:


11

In einer Nussschale können Sie dies derzeit nicht tun.

Es gibt keine Gruppenrichtlinie oder Voreinstellung, um dies festzulegen, und die Art und Weise, in der sie verfolgt wird, macht sie für den aktuellen Benutzer und das System spezifisch, sodass die "Einstellungen" von Instanz zu Instanz sehr unterschiedlich sind.

Sie sind hier gespeichert (in der Registrierung) , wenn Sie es überprüfen: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify.

Von hier :

Es gibt keine Möglichkeit für Anwendungen, sich programmgesteuert immer auf der obersten Ebene der Taskleiste anzuzeigen, weder bei der Erstinstallation noch zu irgendeinem Zeitpunkt während der Laufzeit. Dies ist eine von mehreren Änderungen, die wir in Windows 7 vorgenommen haben, um einen saubereren, leiseren Desktop zu erstellen, der vom Benutzer gesteuert wird, um die oberste Ebene mit seinen bevorzugten Anwendungen und Symbolen anzupassen.

Wir behalten die Kontrolle über den Benachrichtigungsbereich, indem wir keine programmatische Werbung zulassen (außer vorübergehend oder um eine Benachrichtigung anzuzeigen). Vorausgesetzt, der Computer ist ausreichend leise. Wenn Sie Ihr Symbol zum ersten Mal mit Shell_NotifyIcon (NIM_ADD, ...) hinzufügen, wird es 45 Sekunden lang in der Taskleiste angezeigt und dann in den Überlauf verschoben. Wenn der Benutzer für ein Symbol wirbt, wird es immer in der Taskleiste angezeigt. Wenn der Benutzer es herabsetzt, wird das Symbol in der Taskleiste nie angezeigt. Jede Promotion muss vom Benutzer initiiert werden. Wir haben dies in Windows 7 per Drag & Drop und über das Kontrollfeld Benachrichtigungsbereichssymbole erheblich vereinfacht. In Usability-Studien und basierend auf dem Beta-Feedback haben wir festgestellt, dass Benutzer keine Schwierigkeiten haben, das Benachrichtigungsverhalten anzupassen und wirbt für die Symbole, auf die sie schnell zugreifen möchten.

Am einfachsten ist es, ALLE Benachrichtigungsbereichssymbole für alle Benutzer anzuzeigen. Dies kann durch Hinzufügen eines (einfachen) Registrierungseintrags erfolgen:

In HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorererstellen Sie einen neuen DWORD - Wert mit dem Namen EnableAutoTrayund legen Sie es auf 0den Benachrichtigungsbereich der ‚auto verstecken‘ Funktionen auszuschalten.

Mit einigen OU-Konfigurationen und Skripten können Sie sie auch in einem HKCU-Kontext verwenden, wenn dies nur für bestimmte Benutzer / Gruppen geschehen soll.

Weitere Informationen dazu finden Sie hier .


Ich würde lieber nicht alle Symbole anzeigen, aber ich werde, wenn ich muss.
Joel Coehoorn

10

Ich habe online gesucht und das tatsächlich zufällig gefunden.

Kurz gesagt, eine Kombination aus PowerShell (Skript bereitgestellt) und Gruppenrichtlinienobjekt.

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

Lange Geschichte, erstellen Sie ein PowerShell-Skript, das Folgendes enthält:

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

Speichern Sie es als ps1-Datei unter dem Namen Ihrer Wahl.

Öffnen Sie die Gruppenrichtlinien-Verwaltungs-MMC. Wählen Sie das gewünschte Gruppenrichtlinienobjekt aus, klicken Sie mit der rechten Maustaste und wählen Sie Bearbeiten. Navigieren Sie im Editor zu Benutzerkonfiguration> Windows-Einstellungen> Skripts> Anmelden und klicken Sie auf "Eigenschaften von Anzeige". Wechseln Sie zur Registerkarte PowerShell und klicken Sie auf Dateien anzeigen.

Kopieren Sie das soeben erstellte Skript in das gerade geöffnete Explorer-Fenster und schließen Sie es dann wieder.

Fügen Sie im Eigenschaftenfenster des Anmeldeskripts ein neues PowerShell-Skript hinzu, geben Sie im Skriptnamen den Namen des verwendeten Skripts ein (Beispiel: NotifyIcon.ps1) und geben Sie in den Parametern den Programmnamen ein (Groß- und Kleinschreibung beachten!) von der Einstellung zu verwenden:

0 = nur Benachrichtigungen anzeigen 1 = Symbol und Benachrichtigungen ausblenden 2 = Symbol und Benachrichtigungen anzeigen <--- Das, was Sie benötigen

Beispiel: Wenn der RealVNC-Server immer angezeigt werden soll, geben Sie Folgendes ein:

winvnc4.exe 2

als die paramenters

Sie können den Namen der ausführbaren Datei auf verschiedene Arten herausfinden, z. B. indem Sie ein Dialogfeld "Ausführen" öffnen msconfigund die Startprogramme eingeben und anzeigen, manuell zum Installationsverzeichnis navigieren C:\Program Files\{your program}oder versuchen, das gewünschte Programm anhand der Ausführung zu ermitteln Prozesse im Task-Manager. 9 mal von 10 wird dies zum Erfolg führen.

Damit dies funktioniert, muss der Benutzer die Anwendung zuvor ausgeführt und anschließend ordnungsgemäß abgemeldet haben, damit explorer.exe die Möglichkeit erhält, den aktualisierten Infobereichsverlauf in die Registrierung zu schreiben. Bei einer nachfolgenden Anmeldung sollte das Skript das Programm erfolgreich im Verlauf finden und seine Einstellung so aktualisieren, dass sie immer angezeigt wird.

Sie können das Skript zum Debuggen auch manuell über eine PowerShell-Eingabeaufforderung ausführen. Sie MÜSSEN jedoch explorer.exe ('taskkill / f / im explorer.exe') beenden, bevor Sie es ausführen. Andernfalls wird Ihr Update vom explorer nicht angezeigt und überschrieben es, wenn es aufhört.

Ich nehme keine Anerkennung für diesen Prozess. Ich habe es nicht geschrieben, ich habe es nur gefunden. Gutschrift für das Drehbuch geht an Micah Rowland . Der Kredit für den GPO-Prozess geht an Geoff Kendal


Ich bin für eine Weile nicht im Büro und bis ich zurück bin, habe ich das vergessen. Wenn Sie diesen Kommentar Ende nächster Woche beantworten können, kann ich ihn genauer betrachten und möglicherweise die akzeptierte Antwort ändern.
Joel Coehoorn

Nur-Link-Antworten sind aufgrund möglicher zukünftiger Links ein Nein-Nein. Bitte fügen Sie Ihrer Antwort relevante Informationen bei. Es ist uns auch egal, ob Sie eine alte Frage beantwortet haben, es ist eigentlich eine GUTE Sache. Bitte ziehen Sie in Betracht, Ihre "Entschuldigung" und Gründe für das Posten zu entfernen. :)
ƬᴇcƬᴇιʜ007

@ techie007 Danke, bearbeitet @ Joel Coehoorn Ich werde eine Kurznotiz posten, um mich daran zu erinnern: P
Joshua Parnell

@ JoelCoehoorn Hier ist Ihre @ Antwort. Tut mir leid, es hat so lange gedauert, Lot hat es vergessen.
Joshua Parnell

Es funktioniert gut, läuft aber sehr langsam: Auf meinem vernünftig schnellen PC dauert es> 20 Sekunden, bis es fertig ist.
Mozzis

4

Ich weiß nicht, ob Sie die Cachereihenfolge für Symbole festlegen können, da sich diese beim Hinzufügen neuer Programme ständig ändern könnte. Sie können jedoch die Benachrichtigung auf "Immer alle Symbole und Benachrichtigungen in der Taskleiste anzeigen" setzen.

Wechseln Sie zu diesem Registrierungsschlüssel, um dies als Standard festzulegen:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer

Fügen Sie den DWORD-Wert " EnableAutoTray" hinzu, doppelklicken Sie darauf und setzen Sie den Hexadezimalwert auf " 0".

Ich habe das getestet und es hat funktioniert.

Interessanter Hinweis: Ich habe zuerst versucht, diesen Schlüssel hinzuzufügen:

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

Ich habe immer gedacht, dass dies die Standardregistrierung für neue Benutzer ist, aber es hat nicht funktioniert. Also habe ich nachgeschaut und fand diesen interessanten Artikel, der meine lang gehegten Gedanken über diesen .DEFAULT-Schlüssel zunichte macht.

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

Ergänzung: Das Beste, was ich sagen kann, ist, dass die Registrierungseinträge hier sind. Wenn Sie versuchen würden, ein Symbol so festzulegen, wie Sie es tun würden, wenn Sie " Control Panel\All Control Panel Items\Notification Area Icons" geöffnet hätten :

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

Wenn Sie sie anschauen, sind sie nicht sehr verständlich, daher bin ich mir nicht sicher, wie gut Sie sie bearbeiten würden.

Ich schlage vor, dass Sie überlegen, einen neuen Benutzer und dessen Profil anzulegen. Setzen Sie für dieses eine Symbol (mindestens) die Option "Systemsteuerung \ Alle Systemsteuerungselemente \ Benachrichtigungsbereichssymbole" auf "Symbol und Benachrichtigungen anzeigen".

Starten Sie dann neu, um das Profil freizugeben, und melden Sie sich als Administrator an. Kopieren Sie dieses Profil in das " C:\Users\Default" Profil. Sie können dies entweder manuell mit dem Explorer oder wie in " Control Panel\All Control Panel Items\System" "beschrieben tun Advanced System Settings>Advanced>User Profiles>Copy to. Es ist ausgegraut, aber Sie können den Windows-Enabler verwenden , um das zu umgehen .


Ich würde lieber nicht alle Symbole anzeigen, aber ich werde, wenn ich muss.
Joel Coehoorn

Ich werde die Antwort ergänzen.
KCotreau

Ich habe den Windows Enabler und andere Kopierprofillösungen gesehen, aber Experimente haben gezeigt, dass dies für Windows 7 wirklich nicht
Joel Coehoorn

Ich stimme Joel zu, WARUM würden sie diese Funktion deaktivieren? Ich habe immer noch keine Ahnung, außer Menschen, die versuchen, es an den falschen Ort zu kopieren.
KCotreau

@ KCotreau: Es war in den Windows-Bereitstellungsblogs. Dies hat etwas mit bestimmten Vorgängen zu tun, die nur während der Erstellung des Profils ausgeführt werden, z. Ehrlich gesagt ist es scheiße, aber ich kann sehen, warum sie versuchen, alle von dieser Methode wegzubringen. Es ist einfach unvorhersehbar, wie das Endergebnis aussehen wird.
Surfasb

1

Führen Sie dies als Admin aus:

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

Beachten Sie die HKLM statt HKCU .

Überprüfen Sie die Wirkung mit:

ps explorer | kill

Es werden alle Symbole für alle Profile angezeigt.


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

Zu Ihrer Information gibt es einen Codeblock-Format-Wrapper, den Sie nicht in <br>jeder Zeile verwenden müssen.
Enigma

0

Es ist jetzt in späteren Gruppenrichtlinienversionen verfügbar (siehe Option B)

Alle diese Optionen sind in verfügbar User Configuration\Administrative Templates\Start Menu and Taskbar

Du kannst entweder:

A) Schalten Sie es vollständig aus oder schalten Sie ihn ein vollständig ( „den Benachrichtigungsbereich verbergen“ , für beide XP arbeitet und 7)

B) haben sie alle zeigen, oder weiterhin die Symbole der Benutzer festlegt zeigen ( "Infobereich Bereinigung deaktivieren, "funktioniert sowohl für XP als auch für 7)

C) Deaktivieren Sie nur bestimmte Symbole, die im Standard-Gruppenrichtlinienobjekt enthalten sind, z. B. Action Center, Netzwerk, Batterieanzeige, Lautstärke. Soweit ich weiß, sind dies die einzigen 4 Benachrichtigungsbereichssymbole, mit denen Sie über das standardmäßige 2008R2-Gruppenrichtlinienobjekt arbeiten können (und diese funktionieren nur für Vista und höher oder 7 und höher).


1
Daher ist das, wonach ich gefragt habe, nicht über Gruppenrichtlinien verfügbar, da ich ein bestimmtes Symbol erzwingen möchte, das immer angezeigt wird, und dies ist keine der hier beschriebenen GPO-Optionen.
Joel Coehoorn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.