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)
¿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, .lnk
los archivos usan[MS-SHLLINK]: Formato de archivo binario Shell Link (.LNK)
La propiedad que necesito cambiar es Color Table
, se encuentra ubicada en:
EXTRA BLOCKS
→ CONSOLE_PROPERTIES_BLOCK
→Color Table
En un programa necesito usar IShellLinkDataList
y configurar NT_CONSOLE_PROPS
propiedades, 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::AddDataBlock
sin 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 ColorTable
en 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.ps1
script 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.ps1
existe 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:
- correr
cmd
- emitir
color XX
comando: es posible a través del registro emitir un comando antes de que el usuario pueda emitir sus propios comandos - llamar
powershell
desde dentrocmd