如何更改 .lnk 以程式設計方式開啟的控制台視窗的背景顏色?

如何更改 .lnk 以程式設計方式開啟的控制台視窗的背景顏色?

標題說明了一切。如何更改 .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 BLOCKSCONSOLE_PROPERTIES_BLOCKColor 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

要更改背景顏色我會嘗試做的是:

  1. 跑步cmd
  2. 發出color XX命令 - 在使用者能夠發出自己的命令之前,可以透過註冊表發出一個命令
  3. powershell從內部呼叫cmd

相關內容