gpt4 book ai didi

c# - 设置托盘图标始终显示

转载 作者:可可西里 更新时间:2023-11-01 03:00:25 26 4
gpt4 key购买 nike

如何将 NotifyIcon 设置为在右侧托盘中始终可见: http://screensnapr.com/v/qKWHe2.png

因为它将它转移到非事件图标窗口中: http://screensnapr.com/v/jjtuK0.png

问题是托盘图标有一个上下文菜单,可以让别人截屏。因此,每次他们截屏时,那个不活动的图标窗口都会出现在图片中,像照片轰炸机一样挡住它后面的任何东西。

我知道可以通过代码来完成,因为其他应用程序(例如 comodo)无需我将图标拖放到那里就可以完成。为了将快捷方式固定到任务栏,我了解到您在此文件夹中设置了快捷方式:

C:\Users\Username\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar

托盘有类似的东西吗?或者有没有我可以明智地使用代码的选项。

最佳答案

我在网上搜索,实际上是随机发现的。

长话短说,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{您的程序} ,或尝试通过查看任务管理器中正在运行的进程来匹配所需的程序。 10 次中有 9 次会成功。

为了使其工作,用户必须之前运行过该应用程序,然后正确注销,以便 explorer.exe 有机会将更新的通知区域历史记录写入注册表。在随后的登录中,脚本应该会在历史记录中成功找到该程序,并将其设置更新为始终显示。

您也可以尝试在 PowerShell 提示符下手动运行脚本进行调试,但您必须在运行之前终止 explorer.exe ('taskkill/f/im explorer.exe'),否则资源管理器将看不到您的更新,并在它退出时覆盖它。

我不相信这个过程。不是我写的,是我自己找的。剧本归功于 Micah Rowland。 GPO 流程归功于 Geoff Kendal

没有足够的声誉链接到原始作者,除了顶部的那个。

关于c# - 设置托盘图标始终显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7877435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com