.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」がタスクバーに固定されていますが、背景色は黒です。GUI で 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

3 つの PowerShell ショートカットすべてでカラー テーブルが 5645313 に設定されており、RGB 値はすべて (1,36,86) であることがわかりました。

この回答によると:https://stackoverflow.com/a/48071483/14636788

明示的な RGB カラーを指定する場合、COLORREF 値は次の 16 進形式になります。

0x00BBGGRR

したがって、RGB 値の順序を逆にすると次のようになります。

PS C:\Windows\System32> [int]"0x562401"
5645313

わかったよ!

しかし、このスクリプトは .lnk ファイルを変更しません。私は Python がそれほど得意ではないのですが、少し調整すれば .lnk ファイルを変更できると思います...

GitHubリポジトリのリンクパース3


私が学んだことによると、.lnkファイルは[MS-SHLLINK]: シェルリンク (.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 ライブラリを使用する必要があることがわかりました。

ShellLink.cs を Google で検索すると、関連するスクリプト ファイルが多数見つかりましたが、C# に精通していないため、部分的にしか理解できませんでした...

では、既存の .lnk ファイルに NT_CONSOLE_PROPS ブロックを追加し、ShellLink.cs ファイルを使用して提供された RGB 値に従ってカラー テーブル属性を設定する PowerShell スクリプトを作成するにはどうすればよいでしょうか?

答え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.exePowerShell シェルを起動するために実行されている可能性があります (黒で始まります)。

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

背景色を変更するには、次のようにします。

  1. 走るcmd
  2. コマンドを発行するcolor XX- ユーザーが独自のコマンドを発行する前に、レジストリを介して 1 つのコマンドを発行することが可能です。
  3. powershell内側から呼びかけるcmd

関連情報