¿Cómo cambiar el color de fondo de la ventana de la consola que se abre mediante programación un .lnk?

¿Cómo cambiar el color de fondo de la ventana de la consola que se abre mediante programación un .lnk?

El título lo dice todo. ¿Cómo cambiar el color de fondo de la ventana de la consola que se abre mediante programación un .lnk?

Por ejemplo, usando mi script de mi anteriorrespuesta: pintotaskbar.ps1:

Esto crea un acceso directo en el escritorio:

$shortcutpath         = "$home\desktop\$name.lnk"
$wshshell             = new-object -comobject wscript.shell
$shortcut             = $wshshell.createshortcut($shortcutpath)
$shortcut.targetpath  = $path
$shortcut.save()

Esto hace que el acceso directo inicie el programa elevado:

$bytes                = [system.io.file]::readallbytes($shortcutpath)
$bytes[0x15]          = $bytes[0x15] -bor 0x20
[system.io.file]::writeallbytes($shortcutpath,$bytes)

Utilicé este código para fijar PowerShell 7.1.1 a la barra de tareas:

pintotaskbar.ps1 "C:\Program Files\PowerShell\7\pwsh.exe::PowerShell 7.1.1"

Fija "Administrador: PowerShell 7.1.1" a la barra de tareas, sin embargo, el color de fondo es negro, conozco la forma GUI de convertirlo en RGB (1,36,86)

ingrese la descripción de la imagen aquí

¿Cómo puedo usar un comando para agregar información del color de fondo al acceso directo?

Gracias por su ayuda.


Encontré algo realmente útil, utilicé este comando para instalar LinkParse3:

pip install LnkParse3

Te da un comando: lnkparse

uso:lnkparse path\to\somelnkfile.lnk

Lo usé para analizar algunos archivos y cargué el resultado en Google Drive:

https://drive.google.com/file/d/1oJKXnr87pyiyM7So8gLlrTnpwUfsV3g2/view?usp=sharing

Descubrí que los tres accesos directos de PowerShell tienen la tabla de colores configurada en 5645313 y todos tienen un valor RGB de (1,36,86).

Según esta respuesta:https://stackoverflow.com/a/48071483/14636788

Al especificar un color RGB explícito, el valor COLORREF tiene la siguiente forma hexadecimal:

0x00BBGGRR

Entonces, si invierto el orden del valor RGB:

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

¡Entendido!

Pero el script no modifica los archivos .lnk, y realmente no soy tan bueno en Python, sin embargo, creo que con un pequeño ajuste puedo hacer que modifique los archivos .lnk...

El repositorio GitHub deLnkParse3


Por lo que he aprendido, .lnklos archivos usan[MS-SHLLINK]: Formato de archivo binario Shell Link (.LNK)

La propiedad que necesito cambiar es Color Table, se encuentra ubicada en:

EXTRA BLOCKSCONSOLE_PROPERTIES_BLOCKColor Table

En un programa necesito usar IShellLinkDataListy configurar NT_CONSOLE_PROPSpropiedades, sin embargo hasta ahora todo lo que puedo encontrar no me permite modificar archivos .lnk con PowerShell, todavía estoy investigando...

Parece que todo lo que tengo que hacer es: IShellLinkDataList::AddDataBlocksin embargo, no sé cómo hacerlo en PowerShell, pero no debería ser difícil...

Finalmente encontré algo realmente útil:

https://github.com/neilpa/cmd-colors-solarized/blob/master/Get-Link.ps1

Aunque debo admitir que es realmente avanzado y complejo, creo que puedo entenderlo y adaptarlo a mis necesidades.


Descubrí que necesito usar la biblioteca .NET/C# IShellLink para lograr esto, usando los métodos mencionados anteriormente;

Al buscar en Google ShellLink.cs pude encontrar un montón de archivos de script relevantes, sin embargo, solo los entiendo parcialmente, ya que no estoy bien versado en C#...

Entonces, ¿cómo puedo escribir un script de PowerShell que agregue el bloque NT_CONSOLE_PROPS a un archivo .lnk existente y establecer el atributo Tabla de colores de acuerdo con el valor RGB proporcionado mediante el uso de un archivo ShellLink.cs?

Respuesta1

El NT_CONSOLE_PROPS La estructura contiene los 16 colores del COLORREF formato que se muestran en la pestaña Propiedades/Colores, que se llama ColorTableen el artículo.

El color que se elige por defecto es el primero, que es el color negro.

Puedes cambiar los colores del enlace utilizando el Get-Link.ps1script de PowerShell que ya has encontrado, sin necesidad de entenderlo.

Para cambiar el color negro a otro color, el código podría verse así, basado en un archivo de solarización archivado. guion:

[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()
)

No he probado este código, pero según lo anterior deberías poder hacerlo funcionar. El guión Get-Link.ps1existe desde hace muchos años, por lo que ahora debería estar en un estado estable.

Respuesta2

Desafortunadamente, powershell.exe no tiene indicadores para especificar un color al inicio que pueda agregar a un .lnk. Es probable que el objetivo que fijó se esté ejecutando cmd.exe(que comienza en negro) para iniciar un shell de PowerShell.

Puede intentar establecer la configuración del registro en HKCU:\Console(desdeesta respuesta). Esto es lo que hace el selector de color en tu captura de pantalla:

Set-Location HKCU:\Console 
New-ItemProperty . ColorTable00 -type DWORD -value 0x00562401 
New-ItemProperty . ColorTable07 -type DWORD -value 0x00f0edee 

O agregue elementos al script de su perfil que se carga al iniciar PS:

# print path to profile script
$profile 

# set example console colors in profile .ps1
[console]::backgroundcolor = "darkmagenta"
[console]::foregroundcolor = "darkyellow"

Respuesta3

Para cambiar el color de fondo lo que intentaría hacer es:

  1. corrercmd
  2. emitir color XXcomando: es posible a través del registro emitir un comando antes de que el usuario pueda emitir sus propios comandos
  3. llamar powershelldesde dentrocmd

información relacionada