Définir l'icône de plateau pour toujours montrer

comment régler une notification pour qu'elle soit toujours visible dans le bon plateau: http://screensnapr.com/v/qKWHe2.png

parce qu'il le déplace dans la fenêtre de l'icône inactive: http://screensnapr.com/v/jjtuK0.png

le problème est que l'icône de plateau a un menu de contexte qui permet à quelqu'un de prendre une photo d'écran. Donc chaque fois qu'ils prennent une capture d'écran, cette fenêtre d'icône inactive est dans l'image, bloquant ce qui est derrière comme une photo bombardier.

je sais qu'il est possible de le faire par le code parce que d'autres applications comme comodo l'ont fait sans me faire glisser et déposer l'icône là. Pour faire un raccourci vers la barre des tâches, j'ai appris que vous avez mis un raccourci dans ce dossier:

C:UsersUsernameAppDataRoamingMicrosoftInternet ExplorerQuick LaunchUser PinnedTaskBar

Est-il quelque chose de similaire pour le bac? Ou y a-t-il une option que je peux utiliser pour le code.

16
demandé sur abatishchev 2011-10-24 18:44:51

5 réponses

Non applicable par code, il suffit de demander aux utilisateurs de le faire toujours afficher

http://blogs.msdn.com/b/oldnewthing/archive/2010/12/15/10105142.aspx

mais vous pouvez le hacker en modifiant une entrée de registre

HKEY_Current_User\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify

case

7
répondu Mohamed Abed 2011-10-24 15:02:14

j'ai cherché en ligne et j'ai trouvé ça au hasard.

pour faire court, une combinaison de PowerShell (script fourni) et de GPO.

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

c'est une Longue histoire, créer un script PowerShell contenant le code suivant:

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

l'Enregistrer comme une ps1 fichier en utilisant le nom de votre choix.

ouvrir la Politique de groupe MMC de gestion. Sélectionner votre choix d'Objet de Stratégie de Groupe, cliquez droit et sélectionnez Modifier. Dans l'éditeur, naviguez vers la Configuration de L'utilisateur > Paramètres de Windows > Scripts > connectez-vous et cliquez sur "Afficher les propriétés". Allez à L'onglet PowerShell et cliquez sur Voir les fichiers.

Copier le script que vous venez de faire dans la fenêtre de l'Explorateur qui vient de s'ouvrir, puis fermer la fenêtre.

dans la fenêtre des propriétés du script de connexion, ajoutez un nouveau script PowerShell, dans le nom du script, entrez le nom du script que vous avez utilisé (exemple: NotifyIcon.ps1), puis dans les paramètres, entrez le nom du programme (sensible à la casse!), suivie par le paramètre à utiliser:

0 = afficher uniquement les notifications 1 = masquer l'icône et les notifications 2 = afficher l'icône et les notifications <--- celui dont vous avez besoin

exemple, si vous avez besoin que le serveur RealVNC apparaisse toujours, vous devez entrer:

winvnc4.exe 2

comme les paramenters

Vous pouvez trouver le nom de l'exécutable dans deux façons différentes, comme ouvrir une boîte de dialogue Run et taper msconfig et regarder les programmes de démarrage, naviguer manuellement dans le répertoire d'installation C:\Program Fichiers{votre programme}, ou essayer de faire correspondre le programme désiré en regardant les processus en cours d'exécution dans le Gestionnaire des tâches. 9 fois sur 10, Cela donnera du succès.

pour que cela fonctionne, l'utilisateur doit avoir préalablement exécuter l'application, puis connecté correctement, de manière à explorer.l'exe a une chance pour écrire l'historique de la zone de notification mise à jour au Registre. Lors d'une connexion ultérieure, le script devrait réussir à localiser le programme dans l'historique, et mettre à jour son réglage pour toujours afficher.

Vous pouvez également essayer d'exécuter le script manuellement à partir d'une invite PowerShell pour déboguer, mais vous devez tuer l'Explorateur.exe ('taskkill /f /im explorer.exe’) avant de l'exécuter, sinon l'explorateur ne verra pas votre mise à jour, et l'écrasera quand il cessera.

je ne prends pas de crédit pour ce processus. Je ne l'ai pas écrit, je l'ai juste trouvé. Le scénario est attribué à Micah Rowland. Le mérite du processus GPO revient à Geoff Kendal

Pas assez de réputation pour lier à des auteurs d'origine, à l'exception de celle du haut.

7
répondu jparnell8839 2013-09-05 20:06:18

donner le statut "toujours visible" aux icônes de la zone de notification est un choix que l'utilisateur fait à travers la boîte de dialogue Propriétés de la barre des tâches. Il s'agit d'une décision prise par l'équipe de Windows afin mettre ce choix à la discrétion de l'utilisateur.

Pour cette raison, il n'y a pas d'interface programmatique cela vous permet de rendre une icône toujours visible. Il y a même pas d'interface demander si votre icône est visible ou pas.

dans vos chaussures je viens de mettre en place un hotkey qui permet à l'utilisateur de prendre des screenshots sans être impliqué avec l'icône du tout (tous les programmes de capture d'écran le font).

si l'utilisateur aime vraiment faire un clic droit avant de prendre une capture d'écran, il peut toujours modifier ses préférences à travers les propriétés de la barre des tâches comme mentionné ci-dessus.

6
répondu Jon 2011-10-24 14:52:36

Microsoft a explicitement pris la position qu'il s'agit d'une décision pour l'utilisateur et non une qui peut être faite programmatiquement. Oui, il y a divers utilitaires autour de ce hack aux internes pour réaliser ceci, mais il n'y a aucun moyen soutenu pour réaliser ce que vous désirez.

0
répondu David Heffernan 2011-10-24 14:52:54

utiliser quelque chose comme ce script pour améliorer un paquet de logiciel de sorte qu'avec une simple case à cocher l'utilisateur peut décider si l'icône à épingler à la zone de notification (ou non) sans avoir à sauter à travers les différents cerceaux que Microsoft a choisi de mettre dans la manière semble comme une idée fantastique en termes d'accessibilité.

peut-être si Microsoft avait offert un clic droit pin/unpin option sur les icônes de zone de notification (comme la barre des tâches), ou la capacité pour un programme de facilement proposer une telle fonctionnalité, nous ne serions pas avoir cette discussion.

0
répondu Kurt 2016-11-02 22:13:12