Der Titel sagt alles. Wie kann ich die Hintergrundfarbe des Konsolenfensters ändern, das eine LNK-Datei programmgesteuert öffnet?
Zum Beispiel mit meinem Skript aus meinem vorherigenAntwort: pintotaskbar.ps1
:
Dadurch wird eine Verknüpfung auf dem Desktop erstellt:
$shortcutpath = "$home\desktop\$name.lnk"
$wshshell = new-object -comobject wscript.shell
$shortcut = $wshshell.createshortcut($shortcutpath)
$shortcut.targetpath = $path
$shortcut.save()
Dadurch wird das Programm über die Verknüpfung mit erhöhten Rechten gestartet:
$bytes = [system.io.file]::readallbytes($shortcutpath)
$bytes[0x15] = $bytes[0x15] -bor 0x20
[system.io.file]::writeallbytes($shortcutpath,$bytes)
Ich habe diesen Code verwendet, um PowerShell 7.1.1 an die Taskleiste anzuheften:
pintotaskbar.ps1 "C:\Program Files\PowerShell\7\pwsh.exe::PowerShell 7.1.1"
Es fixiert „Administrator: PowerShell 7.1.1“ an der Taskleiste, die Hintergrundfarbe ist jedoch schwarz. Ich kenne die GUI-Methode, um es in RGB(1,36,86) umzuwandeln.
Wie kann ich mit einem Befehl der Verknüpfung selbst Hintergrundfarbinformationen hinzufügen?
Ich danke Ihnen für Ihre Hilfe.
Ich habe etwas wirklich Nützliches gefunden und diesen Befehl zur Installation verwendet LinkParse3
:
pip install LnkParse3
Es gibt Ihnen einen Befehl: lnkparse
Verwendung:lnkparse path\to\somelnkfile.lnk
Ich habe damit einige Dateien analysiert und das Ergebnis auf Google Drive hochgeladen:
https://drive.google.com/file/d/1oJKXnr87pyiyM7So8gLlrTnpwUfsV3g2/view?usp=sharing
Ich habe festgestellt, dass bei allen drei PowerShell-Verknüpfungen die Farbtabelle auf 5645313 eingestellt ist und alle einen RGB-Wert von (1,36,86) haben.
Laut dieser Antwort:https://stackoverflow.com/a/48071483/14636788
Bei der Angabe einer expliziten RGB-Farbe hat der COLORREF-Wert die folgende hexadezimale Form:
0x00BBGGRR
Wenn ich also die Reihenfolge des RGB-Wertes umkehre:
PS C:\Windows\System32> [int]"0x562401"
5645313
Erwischt!
Aber das Skript ändert keine .lnk-Dateien und ich bin nicht wirklich gut in Python, aber ich glaube, dass ich es mit einer kleinen Optimierung dazu bringen kann, .lnk-Dateien zu ändern ...
Das GitHub-Repository vonLnkParse3
Soweit ich weiß, .lnk
verwenden Dateien[MS-SHLLINK]: Shell Link (.LNK) Binäres Dateiformat
Die Eigenschaft, die ich ändern muss Color Table
, ist: Sie befindet sich an folgender Adresse:
EXTRA BLOCKS
→ CONSOLE_PROPERTIES_BLOCK
→Color Table
Ich muss in einem Programm Eigenschaften verwenden IShellLinkDataList
und festlegen NT_CONSOLE_PROPS
. Bisher konnte ich jedoch keine LNK-Dateien mit PowerShell ändern. Ich bin noch dabei, das Problem zu untersuchen ...
Anscheinend muss ich nur Folgendes tun: IShellLinkDataList::AddDataBlock
Ich weiß jedoch nicht, wie das in PowerShell geht, aber es sollte nicht schwer sein …
Endlich habe ich etwas wirklich Hilfreiches gefunden:
https://github.com/neilpa/cmd-colors-solarized/blob/master/Get-Link.ps1
Obwohl ich zugeben muss, dass es wirklich fortgeschritten und komplex ist, glaube ich, dass ich es verstehen und an meine Bedürfnisse anpassen kann.
Ich habe festgestellt, dass ich hierzu die .NET/C# IShellLink-Bibliothek verwenden muss, und zwar mit den oben genannten Methoden.
Durch Googeln von ShellLink.cs konnte ich eine Reihe relevanter Skriptdateien finden, ich verstehe sie jedoch nur teilweise, da ich mich mit C# nicht gut auskenne ...
Wie kann ich also ein PowerShell-Skript schreiben, das einer vorhandenen LNK-Datei einen NT_CONSOLE_PROPS-Block hinzufügt und das Farbtabellenattribut anhand des mithilfe einer ShellLink.cs-Datei bereitgestellten RGB-Werts einstellt?
Antwort1
Der
NT_CONSOLE_PROPS
Struktur enthält die 16 Farben in der
FARBREFERENZ
Format, die im Reiter Eigenschaften/Farben angezeigt werden, der ColorTable
im Artikel aufgerufen wird.
Die standardmäßig ausgewählte Farbe ist die erste, nämlich Schwarz.
Mithilfe des Get-Link.ps1
bereits gefundenen PowerShell-Skripts können Sie die Farben im Link ändern, ohne es verstehen zu müssen.
Um die schwarze Farbe in eine andere Farbe zu ändern, könnte der Code wie folgt aussehen, basierend auf einer archivierten Solarisierung Skript:
[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()
)
Ich habe diesen Code nicht getestet, aber basierend auf dem oben Gesagten sollte er funktionieren. Das Skript Get-Link.ps1
gibt es schon seit vielen Jahren, es sollte sich jetzt also in einem stabilen Zustand befinden.
Antwort2
Leider verfügt powershell.exe nicht über Flags, um beim Start eine Farbe anzugeben, die Sie zu einer .lnk-Datei hinzufügen könnten. Das von Ihnen festgelegte Ziel wird wahrscheinlich ausgeführt cmd.exe
(was schwarz startet), um eine Powershell-Shell zu starten.
Sie können versuchen, Registrierungseinstellungen in HKCU:\Console
(vondiese Antwort). Dies macht der Farbwähler in Ihrem Screenshot:
Set-Location HKCU:\Console
New-ItemProperty . ColorTable00 -type DWORD -value 0x00562401
New-ItemProperty . ColorTable07 -type DWORD -value 0x00f0edee
Oder fügen Sie Ihrem Profilskript Elemente hinzu, die beim Start von PS geladen werden:
# print path to profile script
$profile
# set example console colors in profile .ps1
[console]::backgroundcolor = "darkmagenta"
[console]::foregroundcolor = "darkyellow"
Antwort3
Um die Hintergrundfarbe zu ändern, würde ich Folgendes versuchen:
- laufen
cmd
- Befehl ausgeben
color XX
- es ist über die Registrierung möglich, einen Befehl auszugeben, bevor der Benutzer seine eigenen Befehle ausgeben kann - Anruf
powershell
von innencmd