Название говорит само за себя. Как изменить цвет фона окна консоли, открываемого .lnk программно?
Например, используя мой предыдущий сценарийотвечать: pintotaskbar.ps1
:
Это создаст ярлык на рабочем столе:
$shortcutpath = "$home\desktop\$name.lnk"
$wshshell = new-object -comobject wscript.shell
$shortcut = $wshshell.createshortcut($shortcutpath)
$shortcut.targetpath = $path
$shortcut.save()
Это позволяет ярлыку запускать программу с повышенными привилегиями:
$bytes = [system.io.file]::readallbytes($shortcutpath)
$bytes[0x15] = $bytes[0x15] -bor 0x20
[system.io.file]::writeallbytes($shortcutpath,$bytes)
Я использовал этот код, чтобы закрепить PowerShell 7.1.1 на панели задач:
pintotaskbar.ps1 "C:\Program Files\PowerShell\7\pwsh.exe::PowerShell 7.1.1"
Он закрепляет «Администратор: PowerShell 7.1.1» на панели задач, однако цвет фона черный, я знаю способ сделать его RGB (1,36,86) с помощью графического интерфейса.
Как можно использовать команду для добавления информации о цвете фона к самому ярлыку?
Спасибо за помощь.
Я нашел кое-что действительно полезное, я использовал эту команду для установки LinkParse3
:
pip install LnkParse3
Он дает вам команду: lnkparse
Применение:lnkparse path\to\somelnkfile.lnk
Я использовал его для анализа некоторых файлов и загрузил результат на Google Диск:
https://drive.google.com/file/d/1oJKXnr87pyiyM7So8gLlrTnpwUfsV3g2/view?usp=sharing
Я обнаружил, что для всех трех сочетаний клавиш PowerShell таблица цветов установлена на 5645313, и все они имеют значение RGB (1,36,86).
Согласно этому ответу:https://stackoverflow.com/a/48071483/14636788
При указании явного цвета RGB значение COLORREF имеет следующую шестнадцатеричную форму:
0x00BBGGRR
Итак, если я изменю порядок значений RGB на обратный:
PS C:\Windows\System32> [int]"0x562401"
5645313
Попался!
Но скрипт не изменяет файлы .lnk, а я не очень хорошо разбираюсь в Python, однако я думаю, что с небольшой доработкой я смогу заставить его изменять файлы .lnk...
Репозиторий GitHubLnkParse3
Из того, что я узнал, .lnk
файлы используют[MS-SHLLINK]: Формат двоичного файла Shell Link (.LNK)
Недвижимость, которую мне нужно изменить Color Table
, расположена по адресу:
EXTRA BLOCKS
→ CONSOLE_PROPERTIES_BLOCK
→Color Table
В программе мне нужно использовать IShellLinkDataList
и задавать NT_CONSOLE_PROPS
свойства, однако пока все, что я смог найти, не позволяет мне изменять файлы .lnk с помощью PowerShell, я все еще изучаю...
Кажется, все, что мне нужно сделать, это: IShellLinkDataList::AddDataBlock
однако я не знаю, как это сделать в PowerShell, но это не должно быть сложно...
Я наконец-то нашел что-то действительно полезное:
https://github.com/neilpa/cmd-colors-solarized/blob/master/Get-Link.ps1
Хотя я должен признать, что это действительно продвинутый и сложный инструмент, я верю, что смогу его понять и настроить под свои нужды.
Я обнаружил, что для достижения этой цели мне необходимо использовать библиотеку .NET/C# IShellLink, используя методы, упомянутые выше;
Погуглив ShellLink.cs, мне удалось найти кучу соответствующих файлов скриптов, однако я понимаю их лишь частично, так как не очень хорошо разбираюсь в C#...
Итак, как написать скрипт PowerShell, который добавит блок NT_CONSOLE_PROPS в существующий файл .lnk и установит атрибут Color Table в соответствии со значением RGB, предоставленным с помощью файла ShellLink.cs?
решение1
The
NT_CONSOLE_PROPS
структура содержит 16 цветов в
ЦВЕТНОЙ
формат, который отображается на вкладке Свойства/Цвета, которая называется ColorTable
в статье.
По умолчанию выбран первый цвет — черный.
Вы можете изменить цвета в ссылке, используя Get-Link.ps1
скрипт PowerShell, который вы уже нашли, без необходимости его понимать.
Чтобы изменить черный цвет на другой, код может выглядеть следующим образом, на основе архивного соляризационного кода сценарий:
[CmdletBinding()]
param($Path = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Windows PowerShell\Windows PowerShell.lnk" )
# Requires the "Get-Link script"
$lnk = Get-Link $Path
$lnk.ConsoleColors[0] = {new chosen color}
$lnk.Save()
)
Я не тестировал этот код, но, основываясь на вышесказанном, вы должны быть в состоянии заставить его работать. Скрипт Get-Link.ps1
существует уже много лет, поэтому сейчас он должен быть в стабильном состоянии.
решение2
К сожалению, powershell.exe не имеет флагов для указания цвета при запуске, которые вы могли бы добавить в .lnk. Закрепленная вами цель, вероятно, запущена cmd.exe
(которая начинается черным) для запуска оболочки powershell.
Вы можете попробовать установить параметры реестра в HKCU:\Console
(изэтот ответ). Вот что делает палитра цветов на вашем снимке экрана:
Set-Location HKCU:\Console
New-ItemProperty . ColorTable00 -type DWORD -value 0x00562401
New-ItemProperty . ColorTable07 -type DWORD -value 0x00f0edee
Или добавьте элементы в скрипт вашего профиля, который загружается при запуске PS:
# print path to profile script
$profile
# set example console colors in profile .ps1
[console]::backgroundcolor = "darkmagenta"
[console]::foregroundcolor = "darkyellow"
решение3
Чтобы изменить цвет фона, я бы попробовал сделать следующее:
- бегать
cmd
- выдать
color XX
команду - можно через реестр выдать одну команду, прежде чем пользователь сможет выдавать свои собственные команды - звонок
powershell
изнутриcmd