확장 기능은 시스템에서 다른 이미지를 가질 수 있으므로 현재 시스템에서 관련 확장자/이미지를 가져 오는 훌륭한 기술이 있습니다. 그리고 여기에 함수가 있습니다 :SHGetFileInfo를 닫을 수 없습니다.
public static Icon getIconFromFile(string ext, bool large = true)
{
string fileName = (new Random()).Next(100, 1000).ToString() + ext;
System.IO.File.Create(fileName);
System.Drawing.Icon icon;
SHFILEINFO shinfo = new SHFILEINFO();
if (large)
{
IntPtr hImgLarge = Win32.SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_LARGEICON);
icon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
}
else
{
IntPtr hImgSmall = Win32.SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON);
icon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
}
try
{
System.IO.File.Delete(fileName);
}
catch(Exception e)
{
System.Console.WriteLine(e.StackTrace);
}
return icon;
}
문제는 함수가 파일에 대한 액세스를 닫지 않아서 제거 할 수 없다는 것입니다. 어떻게해야합니까? 감사합니다.
다른 기술을 고려하지 않으시겠습니까? 파일을 만들 권한이 없다면 [이 SO 답변] (http://stackoverflow.com/a/272044/)을 참조하십시오. 870604) – ken2k
좋은데, 어떻게 ProgramIcon에서 ImageSource를 추출 할 수 있습니까? – Extaze
아이콘 핸들이 누출되지 않습니까? 더 잘 : Icon.FromHandle (shinfo.hIcon) .clone(); DestroyIcon (shinfo.hIcon)'- 거기 또한 기본 아이콘입니다 .ExtractAssociatedIcon –