我正在使用this post over at Microsoft's TechNet中的代码来更改我正在运行的PowerShell应用程序的图标。这对于显示在PowerShell窗口本身中的图标效果很好,但它不会更改任务栏的图标。我对函数做了一些更改,希望它也会更改显示在任务栏中的图标。
# Set the icon of the current console window to the specified icon.
#
# AUTHOR: Aaron Lerch <http://www.aaronlerch.com/blog>
# COPYRIGHT: © 2009 Aaron Lerch
# LINK: http://gallery.technet.microsoft.com/scriptcenter/9d476461-899f-4c98-9d63-03b99596c2c3
#
# PARAM:
# -IconFile
# Absolute path to the icon file.
# RETURN:
# $null
function Set-ConsoleIcon {
Param(
[parameter(Mandatory = $true)] [string] $IconFile
)
[System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null
# Verify the file exists
if ([System.IO.File]::Exists($iconFile) -eq $true) {
$ch = Invoke-Win32 'kernel32' ([IntPtr]) 'GetConsoleWindow'
$i = 0;
$size = 16;
while ($i -ne 4) {
$ico = New-Object System.Drawing.Icon($iconFile, $size, $size)
if ($ico -ne $null) {
Send-Message $ch 0x80 $i $ico.Handle | Out-Null
}
if ($i -eq 4) {
break
}
$i += 1
$size += 16
}
}
else {
Write-Host 'Icon file not found' -ForegroundColor 'Red'
}
}
我提供了大小为16
(wParam 1
)、32
(wParam 2
)、48
(wParam 3
)和64
(wParam 4
)的图标。
我也尝试改变我的启动C#应用程序(基于this Stackoverflow discussion)的图标,但根本不起作用。
如果你想看完整的代码,请看下面的代码:
2条答案
按热度按时间pepwfjgg1#
这可能无法实现。以下是有关任务栏中"组图标"的详细信息:
Change icon of group in taskbar (Win7)
您可以更改窗口的应用程序ID。由于图标主要来自应用程序ID,通过改变它,资源管理器将不再知道默认图标,而将使用实际的窗口图标。2这也会将该窗口从其他CMD窗口中取消组合,以使单个图标完全可见。(当您在现有控制台窗口中执行此操作时,会出现类似于关闭/新建窗口的任务栏动画。)有一篇MSDN文章,请在其中查找"应用程序ID":
https://msdn.microsoft.com/en-us/magazine/dd942846.aspx
下面是它的相关代码(C++):
(链接库:shlwapi.lib)
Windows API代码包也应该有用于此的托管 Package 代码。没有查找它,因为我目前在C++应用程序中使用此函数。但我在此处找到了有关它的其他问题。
对于你的PowerShell脚本来说,这可能也不会有多大帮助。因为它都是用更复杂的托管代码 Package 起来的本机代码,我认为你最好的选择是一个小的本机帮助工具。我目前正在将这个函数集成到我的FlashConsoleWindow工具中,它可以对控制台窗口做更多的事情,比如 Flink 或显示任务栏进度状态。
jv4diomz2#
一个简单的替代方法是创建powershell exe的快捷方式。将快捷方式的图标更改为您想要的任何图标。
然后,无论何时调用脚本,都要使用快捷方式而不是PS exe。
用途
powershell.lnk快捷方式可以是“C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe”,也可以是没有完整路径的powershell.exe(只要为系统上的PS正确设置了PATH变量)
你可以把PS快捷键放在任何地方,但是我建议你把它和脚本放在一起,以便于移植。
现在,当您通过快捷方式启动脚本时,任务栏图标将是您通过快捷方式文件定义的任何图标。
唯一需要注意的是,快捷方式中的窗口设置将覆盖PS窗口,因此您应该在快捷方式属性中定义您希望它的外观。