標題說明了一切。如何更改 .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) 的 GUI 方法
如何使用指令將背景顏色資訊新增至捷徑本身?
感謝您的幫助。
我發現了一些非常有用的東西,我使用這個命令來安裝LinkParse3
:
pip install LnkParse3
它給你一個指令:lnkparse
用法:lnkparse path\to\somelnkfile.lnk
我用它來解析一些文件並將結果上傳到Google Drive:
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 文件...
的 GitHub 儲存庫連結解析3
據我所知,.lnk
文件使用[MS-SHLLINK]:Shell 連結 (.LNK) 二進位檔案格式
我需要更改的屬性是Color Table
,它位於:
EXTRA BLOCKS
→ CONSOLE_PROPERTIES_BLOCK
→Color Table
在程式中我需要使用IShellLinkDataList
和設定NT_CONSOLE_PROPS
屬性,但是到目前為止我能找到的所有內容都不允許我使用 PowerShell 修改 .lnk 文件,我仍在調查...
看來我要做的就是:IShellLinkDataList::AddDataBlock
但我不知道如何在 PowerShell 中做到這一點,但這應該不難...
我終於找到了一些真正有用的東西:
https://github.com/neilpa/cmd-colors-solarized/blob/master/Get-Link.ps1
儘管我不得不承認它確實非常先進和複雜,但我相信我可以理解它並根據我的需求進行調整。
我發現我需要使用.NET/C# IShellLink 庫來實現這一點,使用上面提到的方法;
透過Google搜尋 ShellLink.cs,我能夠找到一堆相關的腳本文件,但是我只理解部分它們,因為我不太熟悉 C#...
那麼,如何編寫一個 PowerShell 腳本,將 NT_CONSOLE_PROPS 區塊新增到現有的 .lnk 檔案中,並根據使用 ShellLink.cs 檔案提供的 RGB 值設定色表屬性?
答案1
這
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 shell。
您可以嘗試在HKCU:\Console
(從這個答案)。這就是螢幕截圖中的顏色選擇器的作用:
Set-Location HKCU:\Console
New-ItemProperty . ColorTable00 -type DWORD -value 0x00562401
New-ItemProperty . ColorTable07 -type DWORD -value 0x00f0edee
或將專案新增至在 PS start 上載入的設定檔腳本中:
# 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