विंडोज 7 में सभी प्रोफाइल के लिए विशिष्ट ट्रे आइकन हमेशा दिखाएं


13

मैं एक विंडोज 7 मशीन स्थापित कर रहा हूं, जो खुले में बैठ जाएगी और बहुत से लोगों द्वारा साझा की जाएगी। मैंने सभी उपयोगकर्ताओं को सिस्टम ट्रे में बैठने वाले प्रोग्राम को चलाने के लिए एक शॉर्टकट जोड़ा है। मैं चाहता हूं कि इस प्रोग्राम के लिए ट्रे आइकन हमेशा डिफ़ॉल्ट रूप से दिखाई दे, कोई फर्क नहीं पड़ता कि कौन लॉग इन करता है। कोई उपयोगकर्ता इसे अपनी प्रोफ़ाइल पर बंद कर सकता है यदि वे वास्तव में चाहते हैं, लेकिन मुझे कम से कम सेट आउट शुरू करने की आवश्यकता है जैसा कि हमेशा दिखाई देता है। मैं यह कैसे कर सकता हूँ?

मैं बल्कि सभी आइकन नहीं दिखाऊंगा, उसी कारण से वे पहली जगह में छिपे हुए हैं: मैं अव्यवस्था नहीं चाहता। इसके अलावा, जैसा कि यह एक सार्वजनिक कंप्यूटर है, एक और प्रोग्राम है, जिसे डीपफ़्रीज़ कहा जाता है, जिसमें एक सिस्टम ट्रे आइकन भी है, और मैं नहीं चाहता कि वह आइकन हर समय दिखाई दे।


क्या आप सिस्टम ट्रे की तुलना में कुछ अन्य तंत्र द्वारा आइकन / संदेश नहीं दिखा सकते हैं?
jalf

जवाबों:


11

नट-शेल में, वर्तमान में, आप ऐसा नहीं कर सकते।

इसे सेट करने के लिए कोई समूह नीति या प्राथमिकता नहीं है, और जिस तरह से यह ट्रैक रखता है वह वर्तमान उपयोगकर्ता और सिस्टम के लिए विशिष्ट बनाता है, जिससे 'सेटिंग' उदाहरण से उदाहरण के लिए बहुत भिन्न होती है।

यदि आप इसे चेक करना चाहते हैं तो वे यहां (रजिस्ट्री में) संग्रहीत हैं HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify:।

से यहाँ :

प्रोग्राम के लिए एप्लिकेशन के लिए कोई रास्ता नहीं है हमेशा सिस्टम ट्रे पर खुद को पहले स्तर पर या किसी भी समय रनटाइम के दौरान खुद को शीर्ष स्तर दिखा सकते हैं। यह कई बदलावों में से एक है जो हमने विंडोज 7 में क्लीनर, शांत डेस्कटॉप के निर्माण के प्रयास में किया है जो कि उपयोगकर्ता के नियंत्रण में अपने पसंदीदा अनुप्रयोगों और आइकन के साथ शीर्ष स्तर को अनुकूलित करने के लिए है।

हम प्रोग्रामेटिक प्रमोशन (अस्थायी रूप से या अधिसूचना दिखाने के अलावा अन्य) की अनुमति नहीं देकर उपयोगकर्ता को सूचना क्षेत्र के नियंत्रण में रखते हैं। यह मानते हुए कि मशीन पर्याप्त रूप से शांत है, जब आप पहली बार अपने आइकन को Shell_NotifyIcon (NIM_ADD, ...) के साथ जोड़ते हैं, तो इसे 45 सेकंड के लिए टास्कबार पर दिखाया जाएगा, फिर उसके बाद ओवरफ्लो में चले जाएंगे। यदि उपयोगकर्ता किसी आइकन को बढ़ावा देता है, तो वह हमेशा टास्कबार पर रहेगा। यदि उपयोगकर्ता इसे डेमो करता है, तो आइकन टास्कबार पर कभी नहीं देखा जाएगा। किसी भी पदोन्नति के लिए उपयोगकर्ता को पहल करने की आवश्यकता होती है। हमने विंडोज 7 में ड्रैग / ड्रॉप और नोटिफिकेशन एरिया आइकन्स कंट्रोल पैनल के माध्यम से, और हमने प्रयोज्य अध्ययनों में और बीटा फीडबैक के आधार पर जो कुछ देखा है, उसे आसान बना दिया है, यह है कि उपयोगकर्ताओं को अधिसूचना व्यवहार को अनुकूलित करने के तरीके की खोज करने में कोई कठिनाई नहीं है। और उन आइकनों को बढ़ावा देंगे, जिनकी वे त्वरित पहुँच चाहते हैं।

अपने सबसे आसान शर्त के बारे में सभी उपयोगकर्ताओं के लिए सभी अधिसूचना क्षेत्र के चिह्न दिखाना है। यह एक (सरल) रजिस्ट्री प्रविष्टि को जोड़कर किया जा सकता है:

में HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorerनाम की एक नई DWORD मान बनाने EnableAutoTrayऔर इसे करने के लिए सेट 0अधिसूचना क्षेत्र के 'ऑटो छिपाने' सुविधाओं को बंद करने।

कुछ OU कॉन्फ़िगरेशन और स्क्रिप्टिंग के साथ आप इसे HKCU संदर्भ में भी उपयोग कर सकते हैं, यदि आप केवल कुछ उपयोगकर्ताओं या समूहों के लिए ही ऐसा करना चाहते हैं।

उस पर अधिक जानकारी के लिए यहां देखें ।


मैं बल्कि सभी आइकन नहीं दिखाऊंगा, लेकिन अगर मुझे चाहिए तो मैं दिखाऊंगा।
जोएल कोएहॉर्न

10

मैं ऑनलाइन खोज कर रहा था और वास्तव में यह अनियमित पाया।

लंबी कहानी, पॉवरशेल (प्रदान की गई स्क्रिप्ट) और जीपीओ का संयोजन।

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 खोलें। अपनी चुनी हुई ग्रुप पॉलिसी ऑब्जेक्ट का चयन करें, राइट क्लिक करें और एडिट चुनें। संपादक में, उपयोगकर्ता कॉन्फ़िगरेशन> विंडोज सेटिंग्स> लिपियों> लॉगऑन पर जाएं और "प्रदर्शन गुण" पर क्लिक करें। PowerShell टैब पर जाएं और फ़ाइलें देखें पर क्लिक करें।

आपके द्वारा अभी-अभी खोली गई एक्सप्लोरर विंडो में बनाई गई स्क्रिप्ट को कॉपी करें और फिर विंडो से बाहर कर दें।

लॉगिन स्क्रिप्ट गुण विंडो में, स्क्रिप्ट नाम में एक नया PowerShell स्क्रिप्ट जोड़ें, आपके द्वारा उपयोग की गई स्क्रिप्ट का नाम दर्ज करें (उदाहरण: NotifyIcon.ps1), और फिर मापदंडों में, प्रोग्राम का नाम दर्ज करें (केस सेंसिटिव!) का पालन करें। उपयोग करने के लिए सेटिंग द्वारा:

0 = केवल सूचनाएँ दिखाएँ 1 = छिपा आइकन और सूचनाएं 2 = शो आइकन और सूचनाएं <--- जिसकी आपको आवश्यकता है

उदाहरण के लिए, यदि आपको हमेशा दिखने के लिए RealVNC सर्वर की आवश्यकता है, तो आप दर्ज करेंगे:

winvnc4.exe 2

सूत्रधार के रूप में

आप एक जोड़े में निष्पादन योग्य का नाम अलग-अलग तरीकों से पता कर सकते हैं, जैसे कि एक रन डायलॉग बॉक्स खोलना और टाइप करना msconfigऔर स्टार्टअप प्रोग्राम को देखना, मैन्युअल रूप से इंस्टॉलेशन डायरेक्टरी में नेविगेट करना C:\Program Files\{your program}, या रनिंग को देखकर वांछित प्रोग्राम से मिलान करने का प्रयास करना। कार्य प्रबंधक में प्रक्रियाएं। 10 में से 9 बार इसके परिणामस्वरूप सफलता मिलेगी।

इसे काम करने के लिए, उपयोगकर्ता को पहले आवेदन चलाना चाहिए, और फिर ठीक से लॉग आउट करना चाहिए, ताकि एक्सप्लोरर को अद्यतन अधिसूचना क्षेत्र इतिहास को रजिस्ट्री में लिखने का मौका मिले। बाद के लॉगिन पर, स्क्रिप्ट को सफलतापूर्वक इतिहास में कार्यक्रम का पता लगाना चाहिए, और इसकी सेटिंग को हमेशा दिखाने के लिए अपडेट करना चाहिए।

आप स्क्रिप्ट को PowerShell प्रॉम्प्ट से डिबग करने के लिए मैन्युअल रूप से चलाने का भी प्रयास कर सकते हैं, लेकिन आप इसे चलाने से पहले explorer.exe ('taskkill / f / im explorer.exe') को अवश्य मार दें, अन्यथा एक्सप्लोरर आपका अपडेट नहीं देखेगा, और इसे अधिलेखित कर देगा जब यह छोड़ देता है।

मैं इस प्रक्रिया का कोई श्रेय नहीं लेता। मैंने इसे नहीं लिखा, मैंने इसे पाया। स्क्रिप्ट का श्रेय मीका रॉलैंड को जाता है । GPO प्रक्रिया का श्रेय ज्योफ केंडल को जाता है


मैं थोड़ी देर के लिए कार्यालय से बाहर हूं, और जब तक मैं वापस लौटता हूं, मैं इस बारे में भूल गया हूं। यदि आप अगले सप्ताह देर से इस टिप्पणी पर @reply कर सकते हैं तो मैं एक करीब से देख पाऊंगा और शायद स्वीकृत उत्तर को बदल दूं।
जोएल कोएहॉर्न

लिंक-ओनली उत्तर संभव भविष्य के लिंक-रोट के कारण नहीं-नहीं हैं। कृपया अपने उत्तर में प्रासंगिक जानकारी शामिल करें। यदि आप एक पुराने प्रश्न का उत्तर देते हैं, तो हम भी परवाह नहीं करते हैं, यह वास्तव में एक अच्छी बात है, इसलिए कृपया अपने "माफी" और पोस्टिंग के कारणों को हटाने पर विचार करें। :)
ᴇc --ιᴇ007

@ Techie007 धन्यवाद, संपादित @ जोएल कोएहॉर्न मैं याद दिलाने के लिए एक चिपचिपा नोट पोस्ट करूंगा: पी
जोशुआ पार्नेल

@JoelCoehoorn यहां आपका @ उत्तर है। खेद है कि यह इतना लंबा समय लगा, इसके बारे में भूल गया।
जोशुआ पर्नेल

यह अच्छी तरह से काम करता है, लेकिन वास्तव में धीमी गति से चलता है: मेरे उचित तेज पीसी पर पूरा करने के लिए> 20 सेकंड लगते हैं।
मोजिज़

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" प्रोफ़ाइल पर कॉपी करें । आप ऐसा कर सकते हैं या तो मैन्युअल रूप से एक्सप्लोरर का उपयोग करें, या जिस तरह से हम इसे " Control Panel\All Control Panel Items\System" " Advanced System Settings>Advanced>User Profiles>Copy to" में करते हैं। यह धूसर हो जाएगा, लेकिन आप उस के आसपास पाने के लिए Windows Enabler का उपयोग कर सकते हैं ।


मैं बल्कि सभी आइकन नहीं दिखाऊंगा, लेकिन अगर मुझे चाहिए तो मैं दिखाऊंगा।
जोएल कोएहॉर्न

मैं जवाब में जोड़ने जा रहा हूँ।
KCotreau

मैंने विंडोज एनबलर और अन्य कॉपी प्रोफाइल समाधानों को देखा है, लेकिन प्रयोग से पता चला है कि यह वास्तव में विंडोज 7 के लिए टूट गया है। यह मुझे उदास करता है :(
जोएल कोएहॉर्न

मैं जोएल सहमत हूं, वे उस समारोह को क्यों अक्षम करेंगे? मेरे पास अभी भी नहीं है कि लोग इसे गलत जगह कॉपी करने की कोशिश कर रहे हैं।
KCotreau

@Kotreau: यह विंडोज परिनियोजन ब्लॉग्स पर था। इसका कुछ निश्चित संचालन के साथ कुछ करना है जो केवल प्रोफ़ाइल के निर्माण के दौरान होता है, अर्थात "अपना डेस्कटॉप तैयार करना।"। सच कहूं तो यह बेकार है, लेकिन मैं देख सकता हूं कि वे इस पद्धति से सभी को दूर करने का प्रयास क्यों कर रहे हैं। यह सिर्फ अप्रत्याशित है कि अंतिम परिणाम क्या होंगे।
सर्फ

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

FYI करें एक कोड ब्लॉक फॉर्मेट रैपर है ताकि आपको <br>हर लाइन पर उपयोग न करना पड़े ।
पहेली

0

यह अब बाद के संस्करणों में उपलब्ध है समूह नीति, विकल्प बी देखें

इन सभी विकल्पों में उपलब्ध हैं User Configuration\Administrative Templates\Start Menu and Taskbar

आप या तो यह कर सकते हैं:

ए) इसे पूरी तरह से बंद कर दें या इसे पूरी तरह से चालू करें ("अधिसूचना क्षेत्र को छिपाएं, एक्सपी और 7 दोनों के लिए काम करता है)

बी) क्या यह सभी दिखा रहा है, या उपयोगकर्ता द्वारा निर्दिष्ट आइकनों को दिखाना जारी रखें (" अधिसूचना क्षेत्र की सफाई बंद करें,) "XP और 7 दोनों के लिए काम करता है)

C) डिफ़ॉल्ट GPO में शामिल केवल कुछ आइकन अक्षम करें, जैसे एक्शन सेंटर, नेटवर्किंग, बैटरी मीटर, वॉल्यूम। जहां तक ​​मैं बता सकता हूं, वे केवल 4 अधिसूचना क्षेत्र के आइकन हैं जो आप डिफ़ॉल्ट 2008 आर 2 जीपीओ के माध्यम से काम कर सकते हैं (और ये केवल विस्टा और ऊपर या 7 और ऊपर के लिए काम करते हैं)।


1
इसलिए, मैंने जो कुछ भी पूछा, वह समूह नीति के माध्यम से उपलब्ध नहीं है, क्योंकि मैं एक विशिष्ट आइकन को हमेशा दिखाने के लिए मजबूर करना चाहता हूं, और यह यहां वर्णित GPO विकल्पों में से एक नहीं है।
जोएल कोएहॉर्न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.