Wie ändere ich die Hintergrundfarbe des Konsolenfensters, das eine LNK-Datei programmgesteuert öffnet?

Wie ändere ich die Hintergrundfarbe des Konsolenfensters, das eine LNK-Datei programmgesteuert öffnet?

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.

Bildbeschreibung hier eingeben

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ß, .lnkverwenden 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 BLOCKSCONSOLE_PROPERTIES_BLOCKColor Table

Ich muss in einem Programm Eigenschaften verwenden IShellLinkDataListund 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::AddDataBlockIch 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 ColorTableim Artikel aufgerufen wird.

Die standardmäßig ausgewählte Farbe ist die erste, nämlich Schwarz.

Mithilfe des Get-Link.ps1bereits 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.ps1gibt 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:

  1. laufencmd
  2. Befehl ausgeben color XX- es ist über die Registrierung möglich, einen Befehl auszugeben, bevor der Benutzer seine eigenen Befehle ausgeben kann
  3. Anruf powershellvon innencmd

verwandte Informationen