Windows 7のすべてのプロファイルで特定のトレイアイコンを常に表示する


12

私は、オープンに座って多くの人々と共有されるWindows 7マシンをセットアップしています。システムトレイにあるプログラムを実行するために、すべてのユーザーのスタートメニューにショートカットを追加しました。誰がログインしても、このプログラムのトレイアイコンが常にデフォルトで表示されるようにします。ユーザーは、必要に応じてプロファイルでオフにできますが、少なくとも常に表示されるように設定する必要があります。これどうやってするの?

そもそもアイコンが隠されているのと同じ理由で、すべてのアイコンを表示するのではなく、混乱を避けたいです。また、これは公共のコンピューターであるため、DeepFreezeという別のプログラムも実行されており、これにはシステムトレイアイコンもあります。そのアイコンが常に表示されることは望ましくありません。


システムトレイ以外のメカニズムでアイコン/メッセージを表示できませんか?
11

回答:


11

簡単に言えば、現在、これを行うことはできません。

これを設定するグループポリシーや設定はありません。また、追跡方法により、現在のユーザーとシステムに固有のものとなり、「設定」はインスタンスごとに大きく異なります。

チェックアウトしたい場合は、ここに(レジストリーに)保管されますHKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify

ここから:

アプリケーションが、最初のインストール時、または実行中の任意の時点で、システムトレイの最上位にプログラムで常に表示される方法はありません。これは、Windows 7で行ったいくつかの変更の1つで、ユーザーがコントロールできるクリーンで静かなデスクトップを作成して、お気に入りのアプリケーションやアイコンでトップレベルをカスタマイズします。

プログラムによるプロモーション(一時的または通知の表示以外)を許可しないことで、ユーザーが通知領域を制御できるようにします。マシンが十分に静かであると仮定すると、最初にShell_NotifyIcon(NIM_ADD、...)でアイコンを追加すると、タスクバーに45秒間表示され、その後オーバーフローに移動します。ユーザーがアイコンを昇格すると、アイコンは常にタスクバーに表示されます。ユーザーが降格すると、タスクバーにアイコンが表示されなくなります。プロモーションはユーザーが開始する必要があります。ドラッグアンドドロップおよび通知領域アイコンコントロールパネルを介してWindows 7でこれをはるかに簡単にしました。また、ユーザビリティ調査でベータフィードバックに基づいて確認したことは、ユーザーが通知動作をカスタマイズする方法を見つけるのに問題がないことです。すばやくアクセスしたいアイコンを宣伝します。

最も簡単な方法は、すべてのユーザーにすべての通知領域アイコンを表示することです。これは、(単純な)レジストリエントリを追加することで実行できます。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorerという名前の新しいDWORD値を作成EnableAutoTrayし、それを設定し0、通知エリアの「自動的に隠す」機能をオフにします。

一部のOU構成とスクリプトを使用すると、特定のユーザー/グループに対してのみ実行する場合、HKCUコンテキストでも使用できます。

詳細については、こちらをご覧ください。


すべてのアイコンを表示するのではなく、必要に応じて表示します。
ジョエル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

パラメンターとして

実行ダイアログボックスを開いmsconfigてスタートアッププログラムを入力して確認する、インストールディレクトリに手動で移動する、実行中のファイルを探しC:\Program Files\{your program}て目的のプログラムに一致させるなど、いくつかの方法で実行可能ファイルの名前を見つけることができますタスクマネージャのプロセス。10回のうち9回これが成功します。

これが機能するには、ユーザーが以前にアプリケーションを実行してから適切にログアウトし、explorer.exeが更新された通知領域の履歴をレジストリに書き込む必要があります。後続のログインで、スクリプトは履歴でプログラムを正常に見つけ、常に表示するように設定を更新する必要があります。

PowerShellプロンプトからスクリプトを手動で実行してデバッグすることもできますが、実行する前にexplorer.exe( 'taskkill / f / im explorer.exe')を強制終了する必要があります。そうしないと、エクスプローラーは更新を表示せず、上書きされます終了したとき。

私はこのプロセスを信用していません。私はそれを書きませんでした、ただ見つけました。スクリプトの功績はMicah Rowlandにあります。GPOプロセスの功績はGeoff Kendalにあります


私はしばらく外出していて、戻ってくるまでにこのことを忘れていました。来週遅くにこのコメントに@返信できれば、詳しく見て、受け入れられた回答を切り替えることができるでしょう。
ジョエルCoehoorn

将来のリンク腐敗の可能性があるため、リンクのみの回答は不可です。適切な情報を回答に含めてください。また、古い質問に回答したかどうかは気にしませんが、実際には良いことなので、「謝罪」と投稿の理由を削除することを検討してください。:)
Ƭᴇcʜιᴇ007

P:ジョエルCoehoorn私は私を思い出させるために付箋を投稿します@編集しtechie007おかげで、@
ジョシュア・パーネル

@JoelCoehoornこれがあなたの@返信です。申し訳ありませんが、とても時間がかかりました。
ジョシュアパーネル

正常に動作しますが、実行速度は非常に遅くなります。私の合理的な高速PCで完了するには20秒以上かかります。
モッツィス

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

追加:私が言うことができる最高のは、あなたがしようとすると、あなたが「開いならば仕方アイコンセット1しようとしていた場合、レジストリエントリがここにいるということですControl Panel\All Control Panel Items\Notification Area Icons「。

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

あなたがそれらを見ると、それらはあまり理解できないので、あなたがそれらをどのように編集するのかよくわかりません。

新しいユーザーとそのプロファイルを作成し、その1つのアイコンの「コントロールパネル\すべてのコントロールパネルアイテム\通知領域アイコン」を(少なくとも)「アイコンと通知を表示」に設定することをお勧めします。

次に、再起動してプロファイルを解放し、管理者としてログインします。そのプロファイルをプロファイルにコピーしますC:\Users\Default。Explorerを使用して手動で行うことも、「Control Panel\All Control Panel Items\System"" Advanced System Settings>Advanced>User Profiles>Copy to」で使用した方法でも実行できます。グレー表示されますが、Windowsイネーブラーを使用して回避できます。


すべてのアイコンを表示するのではなく、必要に応じて表示します。
ジョエルCoehoorn

答えに追加します。
-KCotreau

私は、Windowsのイネーブラと他のコピープロファイルのソリューションを見てきましたが、実験では、実際にWindows 7のために壊れている、これはそれは私悲しい:(作ることが示されている
ジョエルCoehoorn

私はジョエルに同意します、なぜ彼らはその機能を無効にするのですか?間違った場所にコピーしようとしている人以外には、まだ考えがありません。
-KCotreau

@KCotreau:Windows Deploymentブログに載っていました。これは、プロファイルの作成中にのみ発生する特定の操作、つまり「デスクトップの準備」に関係しています。率直に言って残念ですが、なぜ彼らがこの方法から人々を遠ざけようとしているのかがわかります。最終結果がどうなるかは単に予測不可能です。
surfasb

1

これを管理者として実行します。

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

HKCUの代わりにHKLMに注意してください。

効果を検証する:

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>参考までに、コードブロック形式のラッパーがあるため、すべての行で使用する必要はありません。
エニグマ

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オプションの1つではありません。
ジョエルCoehoorn 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.