.lnk가 프로그래밍 방식으로 열리는 콘솔 창의 배경색을 변경하는 방법은 무엇입니까?

.lnk가 프로그래밍 방식으로 열리는 콘솔 창의 배경색을 변경하는 방법은 무엇입니까?

제목이 모든 것을 말해줍니다. .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

세 가지 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 저장소LnkParse3


내가 배운 것에서 .lnk파일은[MS-SHLLINK]: 쉘 링크(.LNK) 바이너리 파일 형식

변경해야 할 속성은 이며 Color Table다음 위치에 있습니다.

EXTRA BLOCKSCONSOLE_PROPERTIES_BLOCKColor 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를 인터넷 검색하여 관련 스크립트 파일을 많이 찾을 수 있었지만 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.exePowershell 셸을 실행하기 위해 실행 중(검은색으로 시작)일 가능성이 높습니다.

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

배경색을 변경하려면 다음을 수행하십시오.

  1. 달리다cmd
  2. 명령 실행 color XX- 사용자가 자신의 명령을 실행하기 전에 레지스트리를 통해 하나의 명령을 실행할 수 있습니다.
  3. powershell내부에서 전화cmd

관련 정보