我正在使用 Icon.ExtractAssociatedIcon 来获取用户在 openfiledialog 中选择的文件的图标。
问题是如果用户从网络共享中选择一个图标,那么 openfiledialog 的文件名属性是 UNC 格式,这会导致 ArgumentException
在 ExtractAssocaitedIcon
:
Value of '\\server\share\filename' is not valid for 'filePath'.
Stack Trace:
at System.Drawing.Icon.ExtractAssociatedIcon(String filePath, Int32 index)
所以我的问题给出了一个指定为
\\server\share\filename
的文件,我如何获得图标?注: .NET 2.0
最佳答案
用 Reflector 看着这个,它最终调用 ExtractAssociatedIcon
在 shell32.dll
.
您是否尝试过绕过 BCL 通过 PInvoke 访问它?
示例代码(通过 PInvoke.Net ):
[DllImport("shell32.dll", CharSet = CharSet.Unicode)]
static extern IntPtr ExtractAssociatedIcon(IntPtr hInst, StringBuilder lpIconPath,
out ushort lpiIcon);
// ... snip
ushort uicon;
StringBuilder strB = new StringBuilder(260); // Allocate MAX_PATH chars
strB.Append(openFileDialog1.FileName);
IntPtr handle = ExtractAssociatedIcon(IntPtr.Zero, strB, out uicon);
Icon ico = Icon.FromHandle(handle);
pictureBox1.Image = ico.ToBitmap();
// ... snip
关于.net - 如何从网络共享文件中获取关联的图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1842226/