ทำให้ไอคอนถาดเฉพาะแสดงเสมอสำหรับส่วนกำหนดค่าทั้งหมดใน Windows 7


13

ฉันกำลังตั้งค่าเครื่อง Windows 7 ที่จะเปิดออกและเปิดใช้งานโดยผู้คนจำนวนมาก ฉันได้เพิ่มทางลัดไปยังเมนูเริ่มผู้ใช้ทั้งหมดเพื่อเรียกใช้โปรแกรมที่อยู่ในถาดระบบ ฉันต้องการไอคอนถาดสำหรับโปรแกรมนี้จะสามารถมองเห็นได้โดยค่าเริ่มต้นไม่ว่าใครจะเข้าสู่ระบบผู้ใช้สามารถปิดมันในโปรไฟล์ของพวกเขาหากพวกเขาต้องการจริงๆ ฉันจะทำสิ่งนี้ได้อย่างไร

ฉันไม่ต้องการแสดงไอคอนทั้งหมดส่วนหนึ่งด้วยเหตุผลเดียวกันกับที่พวกเขาซ่อนอยู่ในสถานที่แรก: ฉันไม่ต้องการความยุ่งเหยิง นอกจากนี้เนื่องจากเป็นคอมพิวเตอร์สาธารณะมีอีกโปรแกรมหนึ่งที่เรียกว่า DeepFreeze ที่ใช้งานซึ่งมีไอคอนในถาดระบบและฉันไม่ต้องการให้ไอคอนนั้นแสดงตลอดเวลา


คุณไม่สามารถแสดงไอคอน / ข้อความโดยกลไกอื่นนอกเหนือจากในถาดระบบหรือไม่?
ศุกร์ที่

คำตอบ:


11

ในปัจจุบันคุณไม่สามารถทำได้

ไม่มีนโยบายกลุ่มหรือการตั้งค่าที่จะตั้งค่านี้และวิธีการติดตามทำให้เฉพาะผู้ใช้ปัจจุบันและระบบทำให้ 'การตั้งค่า' แตกต่างกันอย่างมากจากอินสแตนซ์ไปยังอินสแตนซ์

พวกเขาจะถูกเก็บไว้ที่นี่ (ในรีจิสทรี) HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotifyถ้าคุณต้องการที่จะตรวจสอบออก:

จากที่นี่ :

ไม่มีทางที่แอพพลิเคชั่นจะแสดงตัวเองอยู่ในระดับบนสุดของถาดระบบเสมอเมื่อติดตั้งครั้งแรกหรือเมื่อใดก็ได้ในระหว่างรันไทม์ นี่เป็นหนึ่งในการเปลี่ยนแปลงหลายอย่างที่เราทำใน Windows 7 เพื่อพยายามผลิตเดสก์ท็อปที่สะอาดและเงียบกว่าซึ่งอยู่ในการควบคุมของผู้ใช้ในการปรับแต่งระดับบนสุดด้วยแอปพลิเคชันและไอคอนที่ชื่นชอบ

เราให้ผู้ใช้ควบคุมพื้นที่แจ้งเตือนโดยไม่อนุญาตให้มีการส่งเสริมการขายแบบเป็นโปรแกรม (นอกเหนือจากชั่วคราวหรือเพื่อแสดงการแจ้งเตือน) สมมติว่าเครื่องมีความเงียบเพียงพอเมื่อคุณเพิ่มไอคอนของคุณเป็นครั้งแรกด้วย Shell_NotifyIcon (NIM_ADD, ... ) เครื่องจะแสดงบนทาสก์บาร์เป็นเวลา 45 วินาทีจากนั้นเลื่อนไปที่โอเวอร์โฟลว์หลังจากนั้น หากผู้ใช้เลื่อนไอคอนมันจะอยู่บนทาสก์บาร์เสมอ หากผู้ใช้ลดระดับลงไอคอนจะไม่ปรากฏบนทาสก์บาร์ การส่งเสริมการขายใด ๆ จะต้องเริ่มโดยผู้ใช้ เราทำให้สิ่งนี้ง่ายขึ้นมากใน Windows 7 ผ่านการลาก / วาง & ผ่านแผงควบคุมไอคอนพื้นที่แจ้งเตือนและสิ่งที่เราได้เห็นในการศึกษาการใช้งานและตามข้อเสนอแนะเบต้าคือผู้ใช้ไม่มีปัญหาในการค้นหาวิธีปรับแต่งพฤติกรรมการแจ้งเตือน และจะส่งเสริมไอคอนที่ต้องการเข้าถึงอย่างรวดเร็ว

เกี่ยวกับการเดิมพันที่ง่ายที่สุดของคุณคือการแสดงไอคอนพื้นที่แจ้งเตือนทั้งหมดสำหรับผู้ใช้ทั้งหมด สิ่งนี้สามารถทำได้โดยการเพิ่มรายการรีจิสทรี (ง่าย):

ในการHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorerสร้างค่า DWORD ใหม่ที่ตั้งชื่อEnableAutoTrayและตั้งเป็น0ปิดคุณสมบัติ 'ซ่อนอัตโนมัติ' ของพื้นที่แจ้งเตือน

ด้วยการกำหนดค่า OU และการเขียนสคริปต์บางอย่างคุณสามารถใช้ในบริบท HKCU ได้เช่นกันหากคุณต้องการให้เกิดขึ้นสำหรับผู้ใช้ / กลุ่มบางกลุ่มเท่านั้น

ดูที่นี่สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งนั้น


ฉันไม่ต้องการแสดงไอคอนทั้งหมด แต่ฉันจะทำถ้าฉันต้อง
Joel Coehoorn

10

ฉันกำลังค้นหาออนไลน์และพบสิ่งนี้แบบสุ่ม

เนื้อเรื่องย่อมีส่วนผสมของ PowerShell (สคริปต์ที่ให้มา) และ GPO

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

เรื่องยาวสร้างสคริปต์ PowerShell ที่มีต่อไปนี้:

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

บันทึกเป็นไฟล์ ps1 โดยใช้ชื่อที่คุณเลือก

เปิด MMC การจัดการนโยบายกลุ่ม เลือกวัตถุนโยบายกลุ่มที่คุณเลือกคลิกขวาและเลือกแก้ไข ในเครื่องมือแก้ไขให้ไปที่การกำหนดค่าผู้ใช้> การตั้งค่า Windows> สคริปต์> เข้าสู่ระบบและคลิก "คุณสมบัติการแสดงผล" ไปที่แท็บ PowerShell แล้วคลิกดูไฟล์

คัดลอกสคริปต์ที่คุณเพิ่งสร้างลงในหน้าต่าง Explorer ที่เพิ่งเปิดและปิดหน้าต่าง

ในหน้าต่างคุณสมบัติสคริปต์ล็อกอินให้เพิ่มสคริปต์ PowerShell ใหม่ในชื่อสคริปต์ป้อนชื่อของสคริปต์ที่คุณใช้ (ตัวอย่าง: NotifyIcon.ps1) จากนั้นในพารามิเตอร์ป้อนชื่อโปรแกรม (คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่!) ตาม โดยการตั้งค่าที่จะใช้:

0 = แสดงเฉพาะการแจ้งเตือน 1 = ซ่อนไอคอนและการแจ้งเตือน 2 = แสดงไอคอนและการแจ้งเตือน <--- สิ่งที่คุณต้องการ

ตัวอย่างถ้าคุณต้องการให้เซิร์ฟเวอร์ RealVNC ปรากฏขึ้นเสมอคุณจะต้องป้อน:

winvnc4.exe 2

ในฐานะนักเลง

คุณสามารถค้นหาชื่อของไฟล์ที่เรียกใช้งานได้ด้วยวิธีที่แตกต่างกันสองสามวิธีเช่นการเปิดกล่องโต้ตอบเรียกใช้และพิมพ์msconfigและดูโปรแกรมเริ่มต้นนำทางไปยังไดเรกทอรีการติดตั้งด้วยตนเองC:\Program Files\{your program}หรือพยายามจับคู่โปรแกรมที่ต้องการโดยดูที่การทำงาน กระบวนการในตัวจัดการงาน 9 ครั้งจากทั้งหมด 10 ครั้งจะทำให้สำเร็จ

เพื่อให้สามารถใช้งานได้ผู้ใช้จะต้องเรียกใช้แอปพลิเคชันก่อนหน้านี้แล้วออกจากระบบอย่างถูกต้องเพื่อให้ explorer.exe ได้รับโอกาสในการเขียนประวัติพื้นที่แจ้งเตือนที่อัปเดตไปยังรีจิสทรี ในการลงชื่อเข้าใช้ครั้งต่อไปสคริปต์ควรค้นหาโปรแกรมในประวัติเรียบร้อยแล้วและอัปเดตการตั้งค่าเพื่อแสดงเสมอ

คุณสามารถลองเรียกใช้สคริปต์ด้วยตนเองจากพรอมต์ PowerShell เพื่อตรวจแก้จุดบกพร่อง แต่คุณต้องฆ่า explorer.exe ('taskkill / f / im explorer.exe') ก่อนใช้งานมิฉะนั้น explorer จะไม่เห็นการอัปเดตของคุณและจะเขียนทับ มันเมื่อมันออกจาก

ฉันไม่ได้รับเครดิตสำหรับกระบวนการนี้ ฉันไม่ได้เขียนฉันเพิ่งพบมัน เครดิตสำหรับสคริปต์ไปคาห์โรว์แลนด์ เครดิตสำหรับกระบวนการ GPO ไปที่Geoff Kendal


ฉันออกจากสำนักงานไประยะหนึ่งแล้วพอถึงเวลาฉันจะกลับมาฉันจะลืมเรื่องนี้ไป หากคุณสามารถ @reply ความคิดเห็นนี้ในปลายสัปดาห์หน้าฉันจะสามารถตรวจสอบได้อย่างใกล้ชิดและอาจเปลี่ยนคำตอบที่ยอมรับได้
Joel Coehoorn

คำตอบสำหรับลิงก์อย่างเดียวนั้นไม่น่าจะเป็นไปได้เนื่องจากการเชื่อมโยงที่เกิดขึ้นในอนาคตอาจเป็นไปได้ โปรดระบุข้อมูลที่เกี่ยวข้องในคำตอบของคุณ เราไม่สนใจถ้าคุณตอบคำถามเก่าจริง ๆ แล้วมันเป็นสิ่งที่ดีดังนั้นโปรดลบ "คำขอโทษ" ของคุณและเหตุผลในการโพสต์ออก :)
Ƭᴇcʜιᴇ007

@ techie007 ขอบคุณแก้ไขแล้ว @ Joel Coehoorn ฉันจะโพสต์โน้ตเพื่อเตือนฉัน: P
Joshua Parnell

@JoelCoehoorn @ นี่คือคำตอบของคุณ ขออภัยมันใช้เวลานานมากดังนั้นโปรดลืมไปเสีย
Joshua Parnell

มันใช้งานได้ดี แต่ทำงานช้ามาก: ใช้เวลา> 20 วินาทีเพื่อทำให้เสร็จบนพีซีที่รวดเร็วของฉัน
Mozzis

4

ฉันไม่ทราบว่าคุณสามารถตั้งค่าลำดับแคชสำหรับไอคอนได้หรือไม่เพราะอาจมีการเปลี่ยนแปลงตลอดเวลาหากมีการเพิ่มโปรแกรมใหม่ แต่คุณสามารถตั้งค่าการแจ้งเตือนเป็น "แสดงไอคอนและการแจ้งเตือนทั้งหมดบนแถบงาน" ได้เสมอ

หากต้องการตั้งค่านี้เป็นค่าเริ่มต้นให้ไปที่คีย์รีจิสทรีนี้:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer

เพิ่มค่า DWORD " EnableAutoTray" ดับเบิลคลิกและตั้งค่าเลขฐานสิบหกเป็น " 0"

ฉันทดสอบและใช้งานได้

หมายเหตุที่น่าสนใจ:ฉันพยายามเพิ่มไปที่คีย์นี้ก่อน:

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

ฉันคิดอยู่เสมอว่าเป็นรีจิสตรีเริ่มต้นสำหรับผู้ใช้ใหม่ แต่ไม่ได้ผล ดังนั้นฉันจึงไปดูและพบว่าบทความที่น่าสนใจนี้ทำให้ฉันคิดถึงความคิดระยะยาวเกี่ยวกับคีย์. DEFAULT

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

นอกจากนี้: สิ่งที่ดีที่สุดที่ฉันบอกได้คือรายการรีจิสตรีอยู่ที่นี่หากคุณกำลังจะลองและตั้งค่าไอคอนเดียวตามที่คุณต้องการหากคุณเปิด " Control Panel\All Control Panel Items\Notification Area Icons":

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

หากคุณดูพวกเขาพวกเขาจะไม่เข้าใจดังนั้นฉันไม่แน่ใจว่าคุณจะแก้ไขได้ดีแค่ไหน

ฉันขอแนะนำให้คุณพิจารณาสร้างผู้ใช้ใหม่และโพรไฟล์ของมันตั้งค่า "ไอคอนพื้นที่รายการการแจ้งเตือน \ แผงควบคุม \ ทั้งหมด" สำหรับไอคอนหนึ่ง (อย่างน้อย) เป็น "แสดงไอคอนและการแจ้งเตือน"

จากนั้นรีบูตเพื่อปล่อยโปรไฟล์และล็อกอินในฐานะผู้ดูแลระบบ คัดลอกโปรไฟล์นั้นไปยังโปรไฟล์ " C:\Users\Default" คุณสามารถทำได้ด้วยตนเองโดยใช้ Explorer หรือวิธีที่เราใช้ในการทำ " Control Panel\All Control Panel Items\System" " Advanced System Settings>Advanced>User Profiles>Copy to" มันจะเป็นสีเทา แต่คุณสามารถใช้Windows Enablerได้


ฉันไม่ต้องการแสดงไอคอนทั้งหมด แต่ฉันจะทำถ้าฉันต้อง
Joel Coehoorn

ฉันจะเพิ่มคำตอบ
KCotreau

ฉันเคยเห็น Windows Enabler และโซลูชันการคัดลอกโปรไฟล์อื่น ๆ แล้ว แต่การทดลองแสดงให้เห็นว่าสิ่งนี้ใช้งานไม่ได้จริง ๆ สำหรับ windows 7 มันทำให้ฉันเศร้า :(
Joel Coehoorn

ฉันเห็นด้วยกับโจเอลทำไมพวกเขาถึงปิดการใช้งานฟังก์ชั่นนี้ ฉันยังไม่มีความคิดนอกเหนือจากคนพยายามคัดลอกไปยังสถานที่ที่ไม่ถูกต้อง
KCotreau

@KCotreau: มันอยู่ในบล็อกการปรับใช้ Windows มีบางอย่างเกี่ยวกับการทำงานบางอย่างที่เกิดขึ้นเฉพาะในระหว่างการสร้างโปรไฟล์เช่น "การเตรียมเดสก์ท็อปของคุณ.." ตรงไปตรงมามันดูด แต่ฉันเห็นได้ว่าทำไมพวกเขาถึงพยายามทำให้ทุกคนออกไปจากวิธีนี้ เป็นเพียงการคาดเดาไม่ได้ว่าผลลัพธ์สุดท้ายจะเป็นอย่างไร
surfasb

1

รันสิ่งนี้ในฐานะผู้ดูแลระบบ:

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

สังเกตHKLMแทนHKCU

ตรวจสอบผลกระทบด้วย:

ps explorer | kill

มันจะแสดงไอคอนทั้งหมดสำหรับโปรไฟล์ทั้งหมด


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

FYI มีตัวห่อรูปแบบรหัสบล็อกดังนั้นคุณไม่จำเป็นต้องใช้<br>ในทุกบรรทัด
ปริศนา

0

ตอนนี้พร้อมใช้งานในนโยบายกลุ่มรุ่นที่ใหม่กว่าดูตัวเลือก B

ตัวเลือกทั้งหมดเหล่านี้มีให้ใน User Configuration\Administrative Templates\Start Menu and Taskbar

คุณสามารถ:

A) ปิดการใช้งานทั้งหมดหรือเปิดใช้งานอย่างสมบูรณ์ ("ซ่อนพื้นที่การแจ้งเตือน" ใช้ได้ทั้ง XP และ 7)

B) แสดงทั้งหมดหรือดำเนินการต่อเพื่อแสดงไอคอนที่ผู้ใช้ระบุ ("ปิดการล้างพื้นที่แจ้งเตือน) "ใช้ได้กับทั้ง XP และ 7)

C) ปิดใช้งานไอคอนบางอย่างเท่านั้นที่รวมอยู่ใน GPO เริ่มต้นเช่น Action Center, Networking, Battery Meter, Volume เท่าที่ฉันสามารถบอกได้ไอคอนเหล่านี้เป็นไอคอนพื้นที่แจ้งเตือน 4 รายการเท่านั้นที่คุณสามารถใช้งานผ่านค่าเริ่มต้น 2008R2 GPO (และใช้ได้กับ Vista และสูงกว่าหรือ 7 หรือสูงกว่า) เท่านั้น


1
ดังนั้นสิ่งที่ฉันถามเกี่ยวกับไม่สามารถใช้งานได้ผ่านนโยบายกลุ่มเนื่องจากฉันต้องการบังคับให้ไอคอนเฉพาะแสดงเสมอและนั่นไม่ใช่หนึ่งในตัวเลือก GPO ที่อธิบายไว้ที่นี่
Joel Coehoorn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.