Ich versuche, die Symbole von Dateien und Ordnern im Ordner system32 zu erhalten, aber "System.ArgumentException" in System.Drawing.dll
auf verschiedenen Dateien zu erhalten.Holen Sie sich alle Symbole aus einem Ordner system32. System.ArgumentException
erstelle ich eine Klasse:
[StructLayout(LayoutKind.Sequential)]
public 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;
}
class Win32
{
public const uint SHGFI_ICON = 0x100;
//public const uint SHGFI_LARGEICON = 0x0; // 'Large icon
public const uint SHGFI_SMALLICON = 0x1; // 'Small icon
[DllImport("shell32.dll")]
public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
[DllImport("gdi32.dll", SetLastError = true)]
public static extern bool DeleteObject(IntPtr hObject);
}
Und erhalten icon:
private Icon GetIcon(string filePatch)
{
Icon icon;
SHFILEINFO shinfo = new SHFILEINFO();
IntPtr hIconSmall = Win32.SHGetFileInfo(filePatch, 0, ref shinfo, /*(uint)Marshal.SizeOf(shinfo)*/ 80, Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON);
if (hIconSmall == IntPtr.Zero)
{
icon = iconUnknown;
}
else
{
icon = Icon.FromHandle(shinfo.hIcon);
//"System.ArgumentException" in System.Drawing.dll
}
Win32.DeleteObject(shinfo.hIcon);
return (icon);
}
Ich weiß, ich brauche DeleteObject
, aber dies scheint nicht aufzutreten. Was mache ich falsch?
PS: Und in Eigenschaften Projekt prüfe ich Any CPU
Ich sehe dass Sie überprüfen, ob die Datei jetzt ist. Ich habe einen Dateiexplorer über Socket gemacht. Ich weiß, dass ich damit ein Problem hatte, dass die Erweiterung nicht bekannt war. Ich nicht die Lösung, aber ich kann Ihnen den Code, der für mich funktioniert –
@TimonPost Fehler auf verschiedenen Dateien, scheint nicht zu arbeiten DeleteObject. Wenn ich das Icon mit nur einer einzigen Datei bekomme, die gerade den Fehler verursacht hat, funktioniert alles. Und ich denke, es wäre nützlich, Ihren Code zu sehen. – DartAlex