문제

Windows 바로 가기 (.lnk) 파일에서 아이콘을 추출해야합니다 (또는 단축키가 지적한 경우 아이콘 파일을 찾으십시오).

Exe 's, DLL 등에서 아이콘을 추출하는 것에 대해 묻는 것이 아닙니다. 설치 프로그램을 실행할 때 해당 단축키가 생성됩니다. 단축키에 의해 표시되는 아이콘은 단축키가 가리키는 .exe에 포함되어 있지 않습니다. 아마도 아이콘은 .lnk 파일에 내장되어 있거나 .lnk 파일에는이 아이콘이있는 위치에 대한 포인터가 포함되어 있습니다. 그러나 내가 찾은 유틸리티 중 어느 것도 이것을 다루지 않습니다. 그들은 모두 .exe로갑니다.

많은 감사합니다!

도움이 되었습니까?

해결책

이 스레드는 다음에 대한 흥미로운 정보를 제공합니다 .lnk 파일에 포함 된 데이터

그만큼 sshgetfileinfoss 함수는 아이콘 파일을 추출 할 수 있어야합니다.

문서화 여기, LNK 파일에 사용 :

Path2Link := 'C:\Stuff\TBear S Saver.lnk';
SHGetFileInfo(PChar(Path2Link), 0, ShInfo1, SizeOf(TSHFILEINFO),
          SHGFI_ICON);
// this ShInfo1.hIcon will have the Icon Handle for the Link Icon with
// the small ShortCut arrow added}

첫 번째 링크에서 C#에 그러한 유틸리티를 구축 할 수 있습니다.

[DllImport("shell32.dll")]
public static extern IntPtr SHGetFileInfo(
   string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, 
   uint cbSizeFileInfo, uint uFlags);

유틸리티를 구축 할 수도 있습니다 자동화 스크립트 언어, 당신이 다음과 같이 선언 된 해당 함수를 사용하는 곳.

Func _ShellGetAssocIcon(Const $szFile,Const $IconFlags = 0)
    Local $tFileInfo = DllStructCreate($tagSHFILEINFO)
    If @error Then
        Return SetError(1,@extended,0)
    EndIf

    Local $Ret = DllCall("shell32.dll","int","SHGetFileInfo","str",$szFile,"dword",0, _
        "ptr",DllStructGetPtr($tFileInfo),"uint",DllStructGetSize($tFileInfo),"uint",BitOr($SHGFI_ICON,$IconFlags))
    MsgBox(0,0,@error)
    Return DllStructGetData($tFileInfo,"hIcon")
EndFunc

다른 팁

Shell32 acessing 링크 방법 사용 :

String lnkPath = @"C:\Users\PriceR\Desktop\Microsoft Word 2010.lnk";
//--- run microsoft word
var shl = new Shell32.Shell();         // Move this to class scope
lnkPath = System.IO.Path.GetFullPath(lnkPath);
var dir = shl.NameSpace(System.IO.Path.GetDirectoryName(lnkPath));
var itm = dir.Items().Item(System.IO.Path.GetFileName(lnkPath));
var lnk = (Shell32.ShellLinkObject)itm.GetLink;
//lnk.GetIconLocation(out strIcon);
String strIcon;
lnk.GetIconLocation(out strIcon);
Icon awIcon = Icon.ExtractAssociatedIcon(strIcon);
this.button1.Text = "";
this.button1.Image = awIcon.ToBitmap();

2010 년 Microsoft는 마침내 공무원을 발표했습니다 사양 LNK 파일 형식의. 물론 그물 주위에 떠 다니는 역 엔지니어링 사양보다 훨씬 정확하고 상세합니다.

완전성을 위해 여기 쉘 링크 및 단축키에 대한 MSDN 설명입니다.

.lnk 파일을 직접 구문 분석 할 수도 있습니다. 이 PDF 또는 이 기사 바로 가기 파일 형식의 세부 사항.

또는 답변에 언급 된 Shelllink 클래스를 사용할 수 있습니다. 이 질문.

이에 몇 가지 더 많은 리소스를 추가하려면 왼쪽 하단 모서리에 바로 가기가있는 응용 프로그램의 아이콘이 아니기 때문에 다음과 같습니다.

나는 이것을 사용하여 아이콘을 얻습니다 없이 바로 가기 화살표 미니 아이콘이 이미지로 추가되었습니다.

using IWshRuntimeLibrary;

Image ShortcutIcon = System.Drawing.Icon.ExtractAssociatedIcon(((IWshShortcut)new WshShell().CreateShortcut(File)).TargetPath).ToBitmap();

대신 아이콘으로 가져 오려면 :

Icon ShortcutIcon = System.Drawing.Icon.ExtractAssociatedIcon(((IWshShortcut)new WshShell().CreateShortcut(File)).TargetPath);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top