タイトルがすべてを物語っています。.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 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 ライブラリを使用する必要があることがわかりました。
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.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
- ユーザーが独自のコマンドを発行する前に、レジストリを介して 1 つのコマンドを発行することが可能です。 powershell
内側から呼びかけるcmd