SHGetFileInfo
을 사용하여 파일 또는 디렉토리, 즉 아이콘 또는 설명에 대한 특정 정보를 검색합니다.SHGetFileInfo : 파일 확장자가 너무 짧음에 대한 설명
파일 확장명에 대한 설명을 검색 할 때 SHGetFileInfo
에서 반환 된 문자열에는 처음 네 문자가 누락되었습니다. (나는 영어로 내가 생각 Application
의, 독일어 해요로),하지만 난 단지 ndung
를 얻을 예를 들어
는 .pdf
파일의 설명 Adobe Acrobat Document
하지만 난 단지 e Acrobat Document
가져 오거나 .exe
파일의 설명 Anwendung
입니다.
나는 SHGetFileInfo
의 일반적인 구현
public static string GetFileTypeDescription(this FileInfo file)
{
SHFILEINFO shFileInfo;
if (SHGetFileInfo(
file.Extension,
SHGFI_FILE_ATTRIBUTE_NORMAL,
out shFileInfo,
(uint)Marshal.SizeOf(typeof(SHFILEINFO)),
SHGFI_USEFILEATTRIBUTES | SHGFI_TYPENAME)
!= IntPtr.Zero)
{
return shFileInfo.szTypeName;
}
return null;
}
을 사용하고 있습니다 :
잘못 무엇입니까[DllImport("shell32.dll")]
internal static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, out SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
[StructLayout(LayoutKind.Sequential)]
internal struct SHFILEINFO
{
public IntPtr hIcon;
public IntPtr iIcon;
public uint dwAttributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string szDisplayName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string szTypeName;
};
//I omitted all flags which are not used above
private const uint SHGFI_FILE_ATTRIBUTE_NORMAL = 0x80,
SHGFI_USEFILEATTRIBUTES = 0x10,
SHGFI_TYPENAME = 0x400;
? 내가 뭐 놓친 거 없니? 또는 어떻게 전체 설명을 검색 할 수 있습니까?
설명 할 시간을내어 주셔서 감사합니다! 그래서 내 구조체는 4 바이트가 너무 큽니다 ...하지만'hIcon'은 어떨까요? C++ typedef에서는 더 많은 정보를 찾을 수없는'HICON' 타입이고 C#에서는'IntPtr'입니다. x86 및 x64 용으로 컴파일하여 테스트 해 보았습니다. 내 구조체는 x86에서 4 바이트가 짧을까요? –
HICON은 포인터 크기입니다. 따라서 IntPtr은 올바른 번역입니다. Q 코드에서 시작하여 iIcon을 int로 변경해야하며 구조체가 올바르게 선언되어야합니다. –
무슨 일이 일어나는지 더 자세히 설명하기 때문에 답을 수락하십시오. –