Jadikan ikon baki spesifik selalu tampil untuk semua profil di Windows 7

12

Saya sedang menyiapkan mesin Windows 7 yang akan diletakkan di tempat terbuka dan dibagikan oleh banyak orang. Saya telah menambahkan pintasan ke menu mulai semua pengguna untuk menjalankan program yang berada di baki sistem. Saya ingin ikon baki untuk program ini selalu terlihat secara default, tidak peduli siapa yang log in. Seorang pengguna dapat mematikannya di profil mereka jika mereka benar-benar ingin, tetapi saya membutuhkannya untuk setidaknya memulai ditetapkan seperti yang selalu terlihat. Bagaimana saya bisa melakukan ini?

Saya lebih suka tidak menunjukkan semua ikon, sebagian karena alasan yang sama mereka disembunyikan di tempat pertama: Saya tidak ingin kekacauan. Juga, karena ini adalah komputer umum, ada program lain bernama DeepFreeze yang berjalan yang juga memiliki ikon baki sistem, dan saya tidak ingin ikon itu ditampilkan sepanjang waktu.

Joel Coehoorn
sumber
Tidak bisakah Anda menunjukkan ikon / pesan dengan mekanisme lain selain di baki sistem?
jalf

Jawaban:

11

Singkatnya, saat ini, Anda tidak dapat melakukan ini.

Tidak ada Kebijakan Grup atau Preferensi untuk mengatur ini, dan cara melacaknya membuatnya khusus untuk pengguna saat ini dan sistem, membuat 'pengaturan' sangat bervariasi dari contoh ke contoh.

Mereka disimpan di sini (dalam registri) jika Anda ingin memeriksanya: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify.

Dari sini :

Tidak ada cara bagi aplikasi untuk secara terprogram selalu menunjukkan diri mereka tingkat atas pada baki sistem baik pada instalasi pertama atau setiap saat selama runtime. Ini adalah salah satu dari beberapa perubahan yang kami buat di Windows 7 dalam upaya untuk menghasilkan desktop yang lebih bersih dan lebih tenang yang ada di kendali pengguna untuk menyesuaikan tingkat atas dengan aplikasi dan ikon favorit mereka.

Kami menjaga pengguna mengendalikan area notifikasi dengan tidak mengizinkan promosi terprogram (selain sementara atau untuk menampilkan notifikasi). Dengan asumsi mesin cukup tenang, ketika Anda pertama kali menambahkan ikon Anda dengan Shell_NotifyIcon (NIM_ADD, ...) itu akan ditampilkan di taskbar selama 45 detik, kemudian pindah ke overflow sesudahnya. Jika pengguna mempromosikan ikon, ikon itu akan selalu ada di bilah tugas. Jika pengguna mendemosikannya, ikon tidak akan pernah terlihat di bilah tugas. Promosi apa pun harus dimulai oleh pengguna. Kami telah membuat ini lebih mudah di Windows 7 melalui seret / lepas & melalui panel kontrol Ikon Area Pemberitahuan, dan apa yang telah kami lihat dalam studi kegunaan dan berdasarkan umpan balik beta, adalah bahwa pengguna tidak mengalami kesulitan menemukan cara menyesuaikan perilaku pemberitahuan dan akan mempromosikan ikon yang mereka inginkan akses cepat.

Tentang taruhan termudah Anda adalah menampilkan SEMUA ikon Area Pemberitahuan untuk semua pengguna. Ini dapat dilakukan dengan menambahkan entri registri (sederhana):

Dalam HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorermembuat nilai DWORD baru bernama EnableAutoTraydan mengaturnya 0untuk mematikan fitur 'sembunyikan otomatis' Area Pemberitahuan.

Dengan beberapa konfigurasi dan skrip OU Anda dapat menggunakannya dalam konteks HKCU juga, jika Anda hanya ingin itu terjadi untuk pengguna / grup tertentu.

Lihat di sini untuk info lebih lanjut tentang itu.

Ƭᴇcʜιᴇ007
sumber
Saya lebih suka tidak menunjukkan semua ikon, tetapi saya akan melakukannya jika saya harus.
Joel Coehoorn
10

Saya sedang mencari online dan benar-benar menemukan ini secara acak.

Singkatnya, kombinasi dari PowerShell (skrip disediakan) dan GPO.

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

Ceritanya panjang, buat skrip PowerShell yang berisi yang berikut:

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

Simpan sebagai file ps1 menggunakan nama pilihan Anda.

Buka MMC Manajemen Kebijakan Grup. Pilih Objek Kebijakan Grup yang Anda pilih, klik kanan dan pilih Edit. Di editor, navigasikan ke Konfigurasi Pengguna> Pengaturan Windows> Skrip> Masuk dan klik "Properti Tampilan". Buka tab PowerShell dan klik Lihat File.

Salin skrip yang baru saja Anda buat ke jendela Explorer yang baru saja dibuka lalu tutup keluar dari jendela.

Di jendela properti skrip login, tambahkan skrip PowerShell baru, dalam nama skrip, masukkan nama skrip yang Anda gunakan (contoh: NotifyIcon.ps1), dan kemudian pada parameter, masukkan nama program (peka huruf besar kecil!) Diikuti oleh pengaturan untuk digunakan:

0 = hanya tampilkan pemberitahuan 1 = sembunyikan ikon dan pemberitahuan 2 = tampilkan ikon dan pemberitahuan <--- Yang Anda butuhkan

Contoh, jika Anda memerlukan server RealVNC untuk selalu muncul, Anda akan memasukkan:

winvnc4.exe 2

sebagai paramenter

Anda dapat menemukan nama yang dapat dieksekusi dalam beberapa cara yang berbeda, seperti membuka kotak dialog Run dan mengetik msconfigdan melihat program startup, menavigasi secara manual ke direktori instalasi C:\Program Files\{your program}, atau mencoba mencocokkan program yang diinginkan dengan melihat menjalankan proses dalam Task Manager. 9 kali dari 10 ini akan menghasilkan kesuksesan.

Agar ini berfungsi, pengguna harus sebelumnya menjalankan aplikasi, dan kemudian keluar dengan benar, sehingga explorer.exe mendapat kesempatan untuk menulis riwayat area pemberitahuan yang diperbarui ke Registry. Pada login berikutnya, skrip harus berhasil menemukan program dalam sejarah, dan memperbarui pengaturannya untuk selalu ditampilkan.

Anda juga dapat mencoba menjalankan skrip secara manual dari PowerShell prompt untuk debug, tetapi Anda HARUS membunuh explorer.exe ('taskkill / f / im explorer.exe') sebelum menjalankannya, jika tidak explorer tidak akan melihat pembaruan Anda, dan akan menimpa ketika itu berhenti.

Saya tidak mengambil kredit untuk proses ini. Saya tidak menulisnya, saya hanya menemukannya. Penghargaan untuk naskah jatuh ke Micah Rowland . Kredit untuk proses GPO jatuh ke Geoff Kendal

Joshua Parnell
sumber
Saya keluar dari kantor untuk sementara waktu, dan pada saat saya kembali, saya sudah lupa tentang ini. Jika Anda dapat @membalas komentar ini akhir minggu depan saya akan dapat melihat lebih dekat dan mungkin mengganti jawaban yang diterima.
Joel Coehoorn
Jawaban hanya tautan adalah tidak boleh karena kemungkinan pembusukan tautan di masa mendatang. Harap sertakan informasi terkait dalam jawaban Anda. Kami juga tidak peduli jika Anda menjawab pertanyaan lama, itu sebenarnya hal yang BAIK, jadi harap hapus "permintaan maaf" Anda dan alasan untuk mengirim. :)
Ƭᴇcʜιᴇ007
@ techie007 Terima kasih, diedit @ Joel Coehoorn Saya akan mengirim catatan tempel untuk mengingatkan saya: P
Joshua Parnell
@ JoelCoehoorn Ini @ balasan Anda. Maaf butuh waktu lama, montok lupa tentang hal itu.
Joshua Parnell
Ini bekerja dengan baik, tetapi berjalan sangat lambat: membutuhkan> 20 detik untuk menyelesaikan pada PC cepat saya yang masuk akal.
Mozzis
4

Saya tidak tahu apakah Anda dapat mengatur urutan cache untuk ikon mengingat itu dapat terus berubah jika program baru ditambahkan, tetapi Anda dapat mengatur pemberitahuan ke "Selalu tampilkan semua ikon dan pemberitahuan di bilah tugas".

Untuk menetapkan ini sebagai default, buka kunci registri ini:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer

Tambahkan nilai DWORD " EnableAutoTray", klik dua kali, dan tetapkan nilai heksadesimal menjadi " 0".

Saya menguji ini dan itu berhasil.

Catatan menarik: Saya pertama kali mencoba menambahkannya ke kunci ini:

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

Saya selalu berpikir itu adalah registri default untuk pengguna baru, tetapi tidak berhasil. Jadi saya pergi mencari dan menemukan artikel yang menarik ini menghancurkan pikiran lama saya tentang kunci .FAFAULT itu.

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

Tambahan: Yang terbaik yang bisa saya katakan adalah bahwa entri registri ada di sini Jika Anda akan mencoba dan mengatur satu ikon seperti yang Anda lakukan jika Anda membuka " Control Panel\All Control Panel Items\Notification Area Icons":

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

Jika Anda melihatnya, mereka tidak terlalu bisa dimengerti, jadi saya tidak yakin seberapa baik Anda mengeditnya.

Saya menyarankan agar Anda mempertimbangkan untuk membuat pengguna baru dan profilnya, mengatur "Panel Kontrol \ Semua Item Panel Kontrol \ Ikon Area Pemberitahuan" untuk ikon yang satu (setidaknya) menjadi "Tampilkan Ikon dan Pemberitahuan".

Kemudian reboot untuk melepaskan profil, dan masuk sebagai administrator. Salin profil itu ke profil " C:\Users\Default". Anda dapat melakukannya secara manual menggunakan Explorer, atau seperti yang biasa kami lakukan di " Control Panel\All Control Panel Items\System" " Advanced System Settings>Advanced>User Profiles>Copy to". Ini akan berwarna abu-abu, tetapi Anda dapat menggunakan Windows Enabler untuk menyiasatinya.

KCotreau
sumber
Saya lebih suka tidak menunjukkan semua ikon, tetapi saya akan melakukannya jika saya harus.
Joel Coehoorn
Saya akan menambahkan jawabannya.
KCotreau
Saya telah melihat Windows Enabler dan solusi profil salin lainnya, tetapi percobaan telah menunjukkan bahwa ini benar-benar rusak untuk windows 7. Itu membuat saya sedih :(
Joel Coehoorn
Saya setuju Joel, MENGAPA mereka menonaktifkan fungsi itu? Saya masih tidak tahu selain orang yang mencoba menyalinnya ke tempat yang salah.
KCotreau
@KCotreau: Itu ada di blog Windows Deployment. Ini ada hubungannya dengan operasi tertentu yang terjadi hanya selama pembuatan profil, yaitu "Mempersiapkan desktop Anda ..." Terus terang itu menyebalkan, tetapi saya dapat melihat mengapa mereka mencoba untuk menjauhkan semua orang dari metode ini. Hanya saja tidak dapat diprediksi apa hasil akhirnya.
surfasb
1

Jalankan ini sebagai admin:

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

Perhatikan HKLM sebagai gantinya HKCU .

Verifikasi efek dengan:

ps explorer | kill

Ini menunjukkan semua ikon untuk semua profil.

majkinetor
sumber
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"
        }
}
paul
sumber
FYI ada pembungkus format blok kode sehingga Anda tidak harus menggunakan <br>pada setiap baris.
Enigma
0

sekarang tersedia di versi grup kebijakan, lihat opsi B

Semua opsi ini tersedia di User Configuration\Administrative Templates\Start Menu and Taskbar

Anda dapat:

A) Matikan sepenuhnya atau hidupkan sepenuhnya ("sembunyikan area notifikasi," bekerja untuk XP dan 7)

B) Minta semua, atau terus tampilkan ikon yang ditentukan pengguna ("matikan pembersihan area notifikasi, "berfungsi untuk XP dan 7)

C) Nonaktifkan hanya ikon tertentu yang termasuk dalam GPO default, seperti Action Center, Networking, Battery Meter, Volume. Sejauh yang saya tahu, itu adalah satu-satunya ikon 4 Area Pemberitahuan yang dapat Anda gunakan melalui GPO 2008R2 default (dan ini hanya berfungsi untuk Vista dan di atas atau 7 dan di atas).

Technonath
sumber
1
Jadi, kemudian, apa yang saya tanyakan tidak tersedia melalui kebijakan grup, karena saya ingin memaksa ikon tertentu untuk selalu ditampilkan, dan itu bukan salah satu opsi GPO yang dijelaskan di sini.
Joel Coehoorn