Tôi đã tìm kiếm trực tuyến và thực sự tìm thấy điều này một cách ngẫu nhiên.
Ngắn câu chuyện ngắn, kết hợp PowerShell (tập lệnh được cung cấp) và GPO.
http://4sysops.com/archives/forcing-notification-area-icons-to-always-show-in-windows-7-or-windows-8/
câu chuyện dài, tạo ra một kịch bản PowerShell chứa sau:
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[]] [email protected]()
$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ưu nó như là một tập tin ps1 bằng cách sử dụng tên mà bạn chọn.
Mở MMC quản lý chính sách nhóm. Chọn đối tượng chính sách nhóm đã chọn của bạn, nhấp chuột phải và chọn Chỉnh sửa. Trong trình chỉnh sửa, điều hướng đến Cấu hình người dùng> Cài đặt Windows> Tập lệnh> Đăng nhập và nhấp vào "Thuộc tính hiển thị". Chuyển đến tab PowerShell và nhấp vào Xem tệp.
Sao chép tập lệnh bạn vừa tạo vào cửa sổ Explorer vừa mở và sau đó đóng cửa sổ.
Trong cửa sổ thuộc tính tập lệnh đăng nhập, thêm tập lệnh PowerShell mới, trong tên tập lệnh, nhập tên tập lệnh bạn đã sử dụng (ví dụ: NotifyIcon.ps1), và sau đó nhập tham số, nhập tên chương trình ! nhạy cảm) tiếp theo là thiết lập để sử dụng:
0 = chỉ thông báo chương 1 = ẩn biểu tượng và thông báo 2 = biểu tượng chương trình và thông báo < --- Cái bạn cần
Ví dụ, nếu bạn cần RealVNC máy chủ luôn xuất hiện, bạn sẽ nhập:
winvnc4.exe 2
như paramenters
Bạn có thể tìm ra tên của file thực thi trong một vài cách khác nhau, chẳng hạn như khi mở hộp thoại Run và gõ msconfig và nhìn vào các chương trình khởi động, bằng tay điều hướng đến thư mục cài đặt C : \ Program Files {your program}, hoặc cố gắng khớp chương trình mong muốn bằng cách xem các tiến trình đang chạy trong Task Manager. 9 lần trong số 10 điều này sẽ dẫn đến thành công.
Để làm việc này, trước tiên người dùng phải chạy ứng dụng và sau đó đăng xuất đúng cách để explorer.exe có cơ hội ghi lịch sử khu vực thông báo cập nhật vào Registry. Trong lần đăng nhập tiếp theo, tập lệnh sẽ định vị thành công chương trình trong lịch sử và cập nhật cài đặt của chương trình để luôn hiển thị.
Bạn cũng có thể thử chạy tập lệnh theo cách thủ công từ lời nhắc PowerShell để gỡ lỗi, nhưng bạn PHẢI diệt explorer.exe ('taskkill/f/im explorer.exe') trước khi chạy nó, nếu không trình khám phá sẽ không thấy cập nhật của bạn và sẽ ghi đè lên khi nó thoát.
Tôi không có tín dụng cho quy trình này. Tôi không viết nó, tôi chỉ tìm thấy nó. Tín dụng cho kịch bản đi đến Micah Rowland. Ghi có cho quá trình GPO chuyển đến Geoff Kendal
Không đủ danh tiếng để liên kết với tác giả gốc, ngoại trừ danh tiếng ở trên cùng.
Việc đưa ra các biểu tượng khu vực thông báo "trạng thái luôn hiển thị" là lựa chọn của người dùng được thực hiện thông qua hộp thoại thuộc tính của thanh tác vụ. Tôi sẽ ngạc nhiên nếu Windows tiếp xúc với giao diện có lập trình cho nó. – Jon
Có, và thông thường tôi sẽ không cố ép nó lên người dùng. Nhưng điều quan trọng là họ tạo một ảnh chụp màn hình không được che phủ bởi cửa sổ biểu tượng không hoạt động. – Drake
Sau đó, họ có thể đi vào "Tùy chỉnh ..." và nói rằng họ muốn biểu tượng đó hiển thị mọi lúc. –