private int GetIconIndex(string fileName, bool isDirectory, bool forceLoadFromDisk, ShellIconStateConstants iconState) { NativeMethods.SHGetFileInfoConstants dwFlags; uint dwAttr; GetAttributes(isDirectory, forceLoadFromDisk, out dwAttr, out dwFlags); // sFileSpec can be any file. if (fileName.EndsWith(".lnk", StringComparison.InvariantCultureIgnoreCase)) { dwFlags |= NativeMethods.SHGetFileInfoConstants.SHGFI_LINKOVERLAY | NativeMethods.SHGetFileInfoConstants.SHGFI_ICON; iconState = ShellIconStateConstants.ShellIconStateLinkOverlay; forceLoadFromDisk = true; } var shfi = new NativeMethods.SHFILEINFO(); var shfiSize = (uint)Marshal.SizeOf(shfi.GetType()); var retVal = NativeMethods.SHGetFileInfo(fileName, dwAttr, ref shfi, shfiSize, ((uint)(dwFlags) | (uint)iconState)); if (!retVal.Equals(IntPtr.Zero)) { return(shfi.iIcon.ToInt32()); } if (forceLoadFromDisk) { return(GetIconIndex(Path.GetFileName(fileName), isDirectory, false, iconState)); } Debug.Assert((!retVal.Equals(IntPtr.Zero)), "Failed to get icon index"); return(-1); }
public static IntPtr Test() { var shfi = new NativeMethods.SHFILEINFO(); var shfiSize = (uint)Marshal.SizeOf(shfi.GetType()); return(NativeMethods.SHGetFileInfo(@"C:\", 16, ref shfi, shfiSize, 16384)); }
private int GetIconIndex(IntPtr pidlPtr, bool isDirectory, bool forceLoadFromDisk, ShellIconStateConstants iconState) { NativeMethods.SHGetFileInfoConstants dwFlags; uint dwAttr; GetAttributes(isDirectory, forceLoadFromDisk, out dwAttr, out dwFlags); dwFlags |= NativeMethods.SHGetFileInfoConstants.SHGFI_PIDL; var shfi = new NativeMethods.SHFILEINFO(); var shfiSize = (uint)Marshal.SizeOf(shfi.GetType()); var retVal = NativeMethods.SHGetFileInfo(pidlPtr, dwAttr, ref shfi, shfiSize, ((uint)(dwFlags) | (uint)iconState)); if (!retVal.Equals(IntPtr.Zero)) { return(shfi.iIcon.ToInt32()); } Debug.Assert((!retVal.Equals(IntPtr.Zero)), "Failed to get icon index"); return(-1); }
/// <summary> /// Gets the information for the specified /// file name and flags. /// </summary> public void GetInfo() { fileIcon = null; typeName = ""; displayName = ""; NativeMethods.SHFILEINFO shfi = new NativeMethods.SHFILEINFO(); uint shfiSize = (uint)Marshal.SizeOf(shfi.GetType()); IntPtr ret = NativeMethods.SHGetFileInfo( fileName, 0, ref shfi, shfiSize, (uint)(flags)); if (ret != IntPtr.Zero) { if (shfi.hIcon != IntPtr.Zero) { fileIcon = System.Drawing.Icon.FromHandle(shfi.hIcon); // Now owned by the GDI+ object //DestroyIcon(shfi.hIcon); } typeName = shfi.szTypeName; displayName = shfi.szDisplayName; } else { int err = NativeMethods.GetLastError(); Console.WriteLine("Error {0}", err); string txtS = new string('\0', 256); int len = NativeMethods.FormatMessage( NativeMethods.FORMAT_MESSAGE_FROM_SYSTEM | NativeMethods.FORMAT_MESSAGE_IGNORE_INSERTS, IntPtr.Zero, err, 0, txtS, 256, 0); Console.WriteLine("Len {0} text {1}", len, txtS); // throw exception } }
private int GetIconIndex(IntPtr pidlPtr, bool isDirectory, bool forceLoadFromDisk, ShellIconStateConstants iconState) { NativeMethods.SHGetFileInfoConstants dwFlags; uint dwAttr; GetAttributes(isDirectory, forceLoadFromDisk, out dwAttr, out dwFlags); dwFlags |= NativeMethods.SHGetFileInfoConstants.SHGFI_PIDL; var shfi = new NativeMethods.SHFILEINFO(); var shfiSize = (uint)Marshal.SizeOf(shfi.GetType()); var retVal = NativeMethods.SHGetFileInfo(pidlPtr, dwAttr, ref shfi, shfiSize, ((uint)(dwFlags) | (uint)iconState)); if (!retVal.Equals(IntPtr.Zero)) return shfi.iIcon.ToInt32(); Debug.Assert((!retVal.Equals(IntPtr.Zero)), "Failed to get icon index"); return -1; }
private int GetIconIndex(string fileName, bool isDirectory, bool forceLoadFromDisk, ShellIconStateConstants iconState) { NativeMethods.SHGetFileInfoConstants dwFlags; uint dwAttr; GetAttributes(isDirectory, forceLoadFromDisk, out dwAttr, out dwFlags); // sFileSpec can be any file. if (fileName.EndsWith(".lnk", StringComparison.InvariantCultureIgnoreCase)) { dwFlags |= NativeMethods.SHGetFileInfoConstants.SHGFI_LINKOVERLAY | NativeMethods.SHGetFileInfoConstants.SHGFI_ICON; iconState = ShellIconStateConstants.ShellIconStateLinkOverlay; forceLoadFromDisk = true; } var shfi = new NativeMethods.SHFILEINFO(); var shfiSize = (uint)Marshal.SizeOf(shfi.GetType()); var retVal = NativeMethods.SHGetFileInfo(fileName, dwAttr, ref shfi, shfiSize, ((uint)(dwFlags) | (uint)iconState)); if (!retVal.Equals(IntPtr.Zero)) return shfi.iIcon.ToInt32(); if (forceLoadFromDisk) return GetIconIndex(Path.GetFileName(fileName), isDirectory, false, iconState); Debug.Assert((!retVal.Equals(IntPtr.Zero)), "Failed to get icon index"); return -1; }
public static IntPtr Test() { var shfi = new NativeMethods.SHFILEINFO(); var shfiSize = (uint)Marshal.SizeOf(shfi.GetType()); return NativeMethods.SHGetFileInfo(@"C:\", 16, ref shfi, shfiSize, 16384); }