Windows 7에서 특정 트레이 아이콘이 항상 모든 프로필에 표시되도록 설정


13

저는 공개적으로 앉아서 많은 사람들이 공유 할 Windows 7 컴퓨터를 설정하고 있습니다. 시스템 트레이에있는 프로그램을 실행하기 위해 모든 사용자 시작 메뉴에 바로 가기를 추가했습니다. 누가 로그인하든이 프로그램의 트레이 아이콘이 기본적으로 항상 표시되기를 원합니다. 사용자가 원하는 경우 자신의 프로필에서 끌 수 있지만 적어도 항상 보이는 것으로 설정을 시작해야합니다. 어떻게해야합니까?

차라리 모든 아이콘을 표시하지는 않을 것입니다. 같은 이유로 부분적으로 아이콘이 숨겨져 있습니다. 혼란을 원하지 않습니다. 또한 이것은 공용 컴퓨터이므로 시스템 트레이 아이콘이있는 DeepFreeze라는 다른 프로그램이 있으며 그 아이콘이 항상 표시되는 것을 원하지 않습니다.


시스템 트레이 이외의 다른 메커니즘으로 아이콘 / 메시지를 표시 할 수 없습니까?
jalf

답변:


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 탭으로 이동하여 파일보기를 클릭하십시오.

방금 연 탐색기 창에 방금 만든 스크립트를 복사 한 다음 창을 닫으십시오.

로그인 스크립트 속성 창에서 새 PowerShell 스크립트를 추가하고 스크립트 이름에 사용한 스크립트 이름 (예 : NotifyIcon.ps1)을 입력 한 다음 매개 변수에 프로그램 이름 (대소 문자 구분)을 입력하십시오. 사용할 설정으로 :

0 = 알림 만 표시 1 = 아이콘 및 알림 숨기기 2 = 아이콘 및 알림 표시 <--- 필요한 알림

예를 들어, RealVNC 서버가 항상 나타나도록하려면 다음을 입력하십시오.

winvnc4.exe 2

paramenters로

실행 대화 상자 열기 msconfig및 시작 프로그램 입력 및보기, 수동으로 설치 디렉토리 탐색 C:\Program Files\{your program}또는 실행중인 프로그램을보고 원하는 프로그램 일치 와 같은 몇 가지 방법으로 실행 파일 이름을 찾을 수 있습니다. 작업 관리자의 프로세스. 10 회 중 9 회 성공하면 성공합니다.

이 기능을 사용하려면 사용자가 이전에 응용 프로그램을 실행 한 다음 적절히 로그 아웃해야 explorer.exe가 업데이트 된 알림 영역 기록을 레지스트리에 쓸 수 있습니다. 이후에 로그인 할 때 스크립트는 기록에서 프로그램을 성공적으로 찾은 다음 항상 표시되도록 설정을 업데이트해야합니다.

PowerShell 프롬프트에서 스크립트를 수동으로 실행하여 디버깅 할 수도 있지만 실행하기 전에 반드시 explorer.exe ( 'taskkill / f / im explorer.exe')를 종료해야합니다. 그렇지 않으면 탐색기에서 업데이트를 볼 수 없으므로 덮어 씁니다. 종료되면

이 과정에 대한 크레딧은 없습니다. 나는 그것을 쓰지 않고 방금 찾았습니다. 스크립트에 대한 크레딧은 Micah Rowland 로갑니다 . GPO 프로세스에 대한 크레딧이 Geoff Kendal로 이동


나는 한동안 사무실을 나왔고 다시 돌아올 때 나는 이것에 대해 잊어 버릴 것이다. 다음 주 후반에이 댓글에 @ 답글을 달 수 있다면 좀 더 자세히 살펴보고 허용되는 답변을 바꿀 수있을 것입니다.
Joel Coehoorn

링크 전용 답변은 향후 링크 로트가 발생할 수 있기 때문에 아니오입니다. 답변에 적절한 정보를 포함하십시오. 또한 이전 질문에 대한 답변도 중요하지 않습니다. 실제로 좋은 질문이므로 "사과"및 게시 이유를 삭제하는 것이 좋습니다. :)
Ƭᴇcʜιᴇ007

@ 스티커 메모를 게시합니다 조엘 Coehoorn I @ 편집 techie007 덕분에, 저를 생각 나게 : P
여호수아 전시장

@JoelCoehoorn 여기 @ 답변이 있습니다. 너무 오래 걸려서 죄송합니다.
Joshua Parnell

잘 작동하지만 실제로 느리게 실행됩니다. 합리적인 빠른 PC에서 완료하는 데 20 초 이상 걸립니다.
Mozzis

4

새 프로그램이 추가 된 경우 계속 변경 될 수 있음을 고려하여 아이콘의 캐시 순서를 설정할 수 있는지는 모르겠지만 알림을 "작업 표시 줄에 항상 모든 아이콘과 알림 표시"로 설정할 수 있습니다.

이것을 기본값으로 설정하려면 다음 레지스트리 키로 이동하십시오.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer

DWORD 값 " EnableAutoTray"을 추가하고 두 번 클릭 한 다음 16 진수 값을 " 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" 프로필로 복사하십시오 . 탐색기를 사용하여 수동으로 수행하거나 " Control Panel\All Control Panel Items\System" " Advanced System Settings>Advanced>User Profiles>Copy to" 에서 수행 한 방식으로 수행 할 수 있습니다 . 회색으로 표시되지만 Windows 인 에이 블러 를 사용하여 해결할 수 있습니다 .


차라리 모든 아이콘을 표시하지는 않지만 필요한 경우 표시하겠습니다.
Joel Coehoorn

나는 대답에 덧붙일 것입니다.
KCotreau

나는 윈도우 블러 및 다른 복사 프로필 솔루션을 본 적이 있지만 실험은 정말 윈도우 7에 대한 고장이 그것은 나를 슬픈 :( 만드는 것으로 나타났습니다
조엘 Coehoorn

나는 Joel에게 동의합니다. 왜 그 기능을 사용하지 않습니까? 나는 아직도 사람들을 다른 곳으로 복사하려고 시도하는 것 외에는 전혀 모른다.
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"
        }
}

참고로 코드 블록 형식 래퍼가 있으므로 <br>모든 줄 에서 사용할 필요는 없습니다 .
Enigma

0

이제 이후 버전의 그룹 정책에서 사용할 수 있습니다 (옵션 B 참조).

이러한 모든 옵션은 User Configuration\Administrative Templates\Start Menu and Taskbar

다음 중 하나를 수행 할 수 있습니다.

A) 완전히 끄거나 완전히 켭니다 ( "알림 영역 숨기기", XP 및 7 모두에서 작동)

B) 모두 표시하거나 사용자가 지정한 아이콘을 계속 표시합니다 ( "알림 영역 정리 끄기, "는 XP와 7에서 모두 작동합니다.)

C) 기본 GPO에 포함 된 특정 아이콘 (예 : 작업 센터, 네트워킹, 배터리 측정기, 볼륨) 만 비활성화합니다. 내가 알 수있는 한, 기본 2008R2 GPO를 통해 작업 할 수있는 유일한 4 개의 알림 영역 아이콘입니다 (Vista 및 7 이상에서만 작동합니다).


1
따라서 특정 아이콘이 항상 표시되도록하고 싶기 때문에 그룹 정책을 통해 내가 요청한 내용을 사용할 수 없으며 여기에서 설명하는 GPO 옵션 중 하나가 아닙니다.
Joel Coehoorn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.