Windows 7'deki tüm profiller için belirli tepsi simgesini her zaman gösterme


13

Açıkta oturup bir çok insan tarafından paylaşılacak bir Windows 7 makinesi kuruyorum. Sistem tepsisinde oturan bir programı çalıştırmak için tüm kullanıcıların başlat menüsüne bir kısayol ekledim. Kim oturum açarsa açsın bu programın tepsi simgesinin varsayılan olarak her zaman görünür olmasını istiyorum. Bir kullanıcı gerçekten isterse profilinde kapatabilir, ancak en azından her zaman görünür olduğu gibi ayarlanmaya başlaması gerekir. Bunu nasıl yapabilirim?

Tüm simgeleri göstermemeyi tercih ederim, kısmen de aynı nedenle ilk başta gizlendiler: Dağınıklığı istemiyorum. Ayrıca, bu halka açık bir bilgisayar olduğu için DeepFreeze adlı bir sistem tepsisi simgesine sahip başka bir program var ve bu simgenin her zaman gösterilmesini istemiyorum.


Simgeyi / mesajı sistem tepsisindekinden başka bir mekanizma ile gösteremiyor musunuz?
jalf

Yanıtlar:


11

Somun kabuğunda şu anda bunu yapamazsınız.

Bunu ayarlamak için Grup İlkesi veya Tercih yoktur ve izlemenin sürdürülmesi onu mevcut kullanıcıya ve sisteme özgü kılar, bu da 'ayarları' örneklemeden örneğe büyük ölçüde değiştirir.

Eğer bunu kontrol etmek istiyorsanız Onlar (kayıt defterinde) burada saklanır: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify.

Gönderen burada :

Uygulamaların, ilk kurulumda veya çalışma sırasında herhangi bir zamanda sistematik olarak her zaman kendilerini sistematik olarak en üst düzeyde göstermesinin bir yolu yoktur. Bu, Windows 7'de en sevdiğiniz uygulamalar ve simgelerle en üst seviyeyi özelleştirmek için kullanıcının kontrolünde olan daha temiz, daha sessiz bir masaüstü üretmek için yaptığımız birkaç değişiklikten biridir.

Programlı bir promosyona izin vermeyerek (geçici olarak veya bir bildirim göstermek dışında) kullanıcıyı bildirim alanının kontrolünde tutarız. Makinenin yeterince sessiz olduğu varsayılırsa, simgenizi Shell_NotifyIcon (NIM_ADD, ...) ile ilk kez eklediğinizde, görev çubuğunda 45 saniye gösterilir, daha sonra taşmaya gider. Kullanıcı bir simgeyi tanıtırsa, her zaman görev çubuğunda yayınlanır. Kullanıcı indirgeme yaparsa, simge asla görev çubuğunda görünmez. Herhangi bir tanıtımın kullanıcı tarafından başlatılması gerekir. Windows 7'de sürükle / bırak ve Bildirim Alanı Simgeleri kontrol panelinden bunu çok daha kolay hale getirdik ve kullanılabilirlik çalışmalarında ve beta geri bildirimlerine dayanarak gördüğümüz, kullanıcıların bildirim davranışını nasıl özelleştireceklerini keşfetmekte zorluk çekmemeleri ve hızlı erişim istedikleri simgeleri tanıtacaktır.

En kolay bahsiniz hakkında, tüm kullanıcılar için TÜM Bildirim Alanı simgelerini göstermektir. Bu, (basit) bir kayıt defteri girdisi eklenerek yapılabilir:

Gelen HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Exploreradlı yeni bir DWORD değeri oluşturun EnableAutoTrayve ayarlı 0Bildirim Alanı en 'otomatik gizleme' özellikleri kapatmak için.

Bazı OU yapılandırmaları ve komut dosyaları ile, yalnızca belirli kullanıcılar / gruplar için olmasını istiyorsanız, HKCU bağlamında da kullanabilirsiniz.

Bununla ilgili daha fazla bilgi için buraya bakın .


Tüm simgeleri göstermemeyi tercih ederim, ama yapmam gerekirse.
Joel Coehoorn

10

Çevrimiçi arama yapıyordum ve aslında bunu rastgele buldum.

Uzun lafın kısası, PowerShell (komut dosyası sağlanan) ve GPO'nun bir kombinasyonu.

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

Uzun hikaye, aşağıdakileri içeren bir PowerShell betiği oluşturun:

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

İstediğiniz adı kullanarak bir ps1 dosyası olarak kaydedin.

Grup İlkesi Yönetimi MMC'yi açın. Seçtiğiniz Grup İlkesi Nesnesini seçin, sağ tıklayın ve Düzenle'yi seçin. Editörde, Kullanıcı Yapılandırması> Windows Ayarları> Komut Dosyaları> Oturum Açma'ya gidin ve "Görüntü Özellikleri" ni tıklayın. PowerShell sekmesine gidin ve Dosyaları Görüntüle'yi tıklayın.

Az önce oluşturduğunuz komut dosyasını yeni açılan Explorer penceresine kopyalayın ve pencereden kapatın.

Oturum açma komut dosyası özellikleri penceresinde, yeni bir PowerShell komut dosyası ekleyin, komut dosyası adına, kullandığınız komut dosyasının adını girin (örnek: NotifyIcon.ps1) ve ardından parametrelerde, program adını (büyük / küçük harfe duyarlı!) kullanılacak ayara göre:

0 = sadece bildirimleri göster 1 = simgeyi ve bildirimleri gizle 2 = simgeyi ve bildirimleri göster <--- İhtiyacınız olan

Örneğin, her zaman görünmesi için RealVNC sunucusuna ihtiyacınız varsa, şunu girersiniz:

winvnc4.exe 2

Paramenterler olarak

Çalıştır iletişim kutusunu açma msconfigve başlangıç ​​programlarına yazma ve arama, yükleme dizinine el ile gezinme C:\Program Files\{your program}ya da çalışan programa bakarak istediğiniz programı eşleştirmeye çalışma gibi yürütülebilir dosyanın adını birkaç farklı yolla öğrenebilirsiniz. Görev Yöneticisi'nde işlemler. Bu 10 üzerinden 9 kez başarı ile sonuçlanacaktır.

Bunun çalışması için, kullanıcının uygulamayı daha önce çalıştırması ve sonra düzgün bir şekilde oturumu kapatmış olması gerekir; böylece explorer.exe, güncelleştirilmiş bildirim alanı geçmişini Kayıt Defteri'ne yazma şansı elde eder. Bir sonraki oturum açmada, komut dosyasının programı geçmişte başarıyla bulması ve ayarlarını her zaman gösterilecek şekilde güncelleştirmesi gerekir.

Komut dosyasını hata ayıklamak için bir PowerShell isteminden el ile çalıştırmayı da deneyebilirsiniz, ancak çalıştırmadan önce explorer.exe'yi ('taskkill / f / im explorer.exe') öldürmeniz gerekir, aksi takdirde explorer güncellemenizi görmez ve üzerine yazılır bıraktığında.

Bu işlem için kredi almıyorum. Yazmadım, yeni buldum. Senaryo için kredi Micah Rowland'a gidiyor . GPO süreci için kredi Geoff Kendal'a gidiyor


Bir süre ofisteyim ve geri döndüğümde bunu unutmuş olacağım. Bu yorumu önümüzdeki hafta geç saatlerde @ yanıtlayabilirseniz, daha yakından bakabilir ve belki kabul edilen cevabı değiştirebilirim.
Joel Coehoorn

Yalnızca bağlantı yanıtları, gelecekteki olası bağlantı çürümesi nedeniyle hayırdır. Lütfen cevabınıza ilgili bilgileri ekleyin. Eski bir soruyu cevapladıysanız da umursamıyoruz, aslında İYİ bir şey, bu yüzden lütfen "özür" nüzü ve gönderme nedenlerinizi kaldırmayı düşünün. :)
Ƭᴇcʜιᴇ007

@ techie007 Teşekkürler, düzenlendi @ Joel Coehoorn Hatırlatmak için yapışkan bir not yayınlayacağım: P
Joshua Parnell

@JoelCoehoorn İşte @ cevabınız. Üzgünüm çok uzun sürdü, çekül unuttum.
Joshua Parnell

İyi çalışıyor, ancak gerçekten yavaş çalışıyor: makul hızlı bilgisayarımda tamamlanması 20 saniyeden uzun sürüyor.
Mozzis

4

Simgeler için önbellek sırasını, yeni programlar eklenmişse sürekli değişebileceğini düşünerek ayarlayıp ayarlayamayacağınızı bilmiyorum, ancak bildirimi "Her zaman görev çubuğunda tüm simge ve bildirimleri göster" olarak ayarlayabilirsiniz.

Bunu varsayılan olarak ayarlamak için bu kayıt defteri anahtarına gidin:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer

DWORD değerini " EnableAutoTray" ekleyin , çift tıklayın ve onaltılık değeri " 0" olarak ayarlayın.

Bunu test ettim ve işe yaradı.

İlginç not: İlk olarak bu anahtara eklemeye çalıştım:

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

Her zaman yeni kullanıcılar için varsayılan kayıt defteri olduğunu düşündüm, ancak işe yaramadı. Bu yüzden aramaya gittim ve bu ilginç makaleyi bu .DEFAULT anahtarı hakkında uzun süredir düşündüğüm şeyleri yakarken buldum.

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

Ek: Söyleyebileceğim en iyi şey, kayıt defteri girişlerinin burada olmasıdır " Control Panel\All Control Panel Items\Notification Area Icons" seçeneğini açarsanız bir simgeyi istediğiniz gibi ayarlamaya çalışacaksanız :

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

Onlara bakarsanız, çok anlaşılır değiller, bu yüzden onları ne kadar iyi düzenleyeceğinizden emin değilim.

Yeni bir kullanıcı ve profilini oluşturmayı düşünmenizi, bu simge için "Denetim Masası \ Tüm Denetim Masası Öğeleri \ Bildirim Alanı Simgeleri" ni (en azından) "Simge ve Bildirimleri Göster" olarak ayarlamanız önerilir.

Sonra profili serbest bırakmak için yeniden başlatın ve yönetici olarak oturum açın. Bu profili " C:\Users\Default" profiline kopyalayın . Bunu Explorer'ı kullanarak manuel olarak veya " Control Panel\All Control Panel Items\System" " Advanced System Settings>Advanced>User Profiles>Copy to" içinde yaptığımız şekilde yapabilirsiniz . Gri renkte görünür, ancak bunun için Windows Etkinleştirici'yi kullanabilirsiniz.


Tüm simgeleri göstermemeyi tercih ederim, ama yapmam gerekirse.
Joel Coehoorn

Cevaba ekleyeceğim.
KCotreau

Windows Etkinleştirici ve diğer kopya profili çözümlerini gördüm, ancak deneyler bunun gerçekten Windows 7 için kırıldığını gösterdi. Beni üzüyor :(
Joel Coehoorn

Katılıyorum Joel, NEDEN bu işlevi devre dışı bırakırlar? Hala yanlış yere kopyalamaya çalışan insanlar dışında hiçbir fikrim yok.
KCotreau

@KCotreau: Windows Dağıtım bloglarındaydı. Bunun yalnızca profilin oluşturulması sırasında gerçekleşen belirli işlemlerle, yani "Masaüstünüzü hazırlama." İle ilgisi vardır. Açıkçası berbat, ama neden herkesi bu yöntemden uzaklaştırmaya çalıştıklarını görebiliyorum. Sonuçların ne olacağı tahmin edilemez.
surfasb

1

Bunu yönetici olarak çalıştır:

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

Uyarı HKLM yerine HKCU .

Etkisini şununla doğrulayın:

ps explorer | kill

Tüm profiller için tüm simgeleri gösterir.


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

<br>Her satırda kullanmak zorunda kalmamanız için bir kod bloğu formatı sarmalayıcısı var .
Enigma

0

artık daha sonraki sürümler grup ilkesinde kullanılabilir, bkz. seçenek B

Bu seçeneklerin tümü şurada mevcuttur: User Configuration\Administrative Templates\Start Menu and Taskbar

Şunlardan birini yapabilirsiniz:

A) Tamamen kapatın veya tamamen açın ("bildirim alanını gizle, hem XP hem de 7 için çalışır)

B) Tümünü göstermesini veya kullanıcının belirttiği simgeleri göstermeye devam etmesini (" bildirim alanı temizliğini kapat, "hem XP hem de 7 için çalışır)

C) Yalnızca varsayılan GPO'da bulunan İşlem Merkezi, Ağ, Pil Ölçer, Ses Düzeyi gibi belirli simgeleri devre dışı bırakın. Anlayabildiğim kadarıyla, bunlar varsayılan 2008R2 GPO aracılığıyla çalışabileceğiniz tek 4 Bildirim Alanı simgesidir (ve bunlar yalnızca Vista ve üstü veya 7 ve üstü için çalışır).


1
Öyleyse, sorduğum şey grup politikası aracılığıyla mevcut değil, çünkü belirli bir simgeyi her zaman göstermeye zorlamak istiyorum ve bu burada açıklanan GPO seçeneklerinden biri değil.
Joel Coehoorn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.