老板给了个要求,希望大家帮忙想办法

Jackforid2003 2007-05-10 10:37:15
简化起来说就是,一个openfiledialog选中一个文件后,能根据选中的文件拿到这个文件在操作系统中显示的图标

比方说选中一个xls文件,操作系统中装有office的话,应该是一个excel的图标,就显示那个图标,如果选中的是某个exe,就要从它里面挖出他的图标,当然是在找不到就像操作系统那样,显示默认图标。

给100分,大家想办法
...全文
645 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolpc 2007-05-16
  • 打赏
  • 举报
回复
还没有尝试过那样的做法……
学习,顺便帮顶……
sunqiso 2007-05-16
  • 打赏
  • 举报
回复
群号:23207804

C#梦之旅只要你喜欢 C#,并且热爱专研技术,那就加入我们的团队吧!!
甴曱 2007-05-16
  • 打赏
  • 举报
回复
to:Jackforid2003(知识是自己的)
前久刚有点时间。
Jackforid2003 2007-05-15
  • 打赏
  • 举报
回复
cocosoft() 介绍的项目符合要求,非常感谢!
真不知道cocosoft是怎么知道它的,平时积累的?准备结帖
frankla 2007-05-15
  • 打赏
  • 举报
回复
[StructLayout(LayoutKind.Sequential)]
private struct SHFILEINFO
{
public SHFILEINFO(bool b)
{
hIcon = IntPtr.Zero; iIcon = 0; dwAttributes = 0; szDisplayName = ""; szTypeName = "";
}
public IntPtr hIcon;
public int iIcon;
public uint dwAttributes;
[MarshalAs(UnmanagedType.LPStr, SizeConst = 260)]
public string szDisplayName;
[MarshalAs(UnmanagedType.LPStr, SizeConst = 80)]
public string szTypeName;
};

private enum SHGFI
{
SHGFI_ICON = 0x000000100, // get icon
SHGFI_DISPLAYNAME = 0x000000200, // get display name
SHGFI_TYPENAME = 0x000000400, // get type name
SHGFI_ATTRIBUTES = 0x000000800, // get attributes
SHGFI_ICONLOCATION = 0x000001000, // get icon location
SHGFI_EXETYPE = 0x000002000, // return exe type
SHGFI_SYSICONINDEX = 0x000004000, // get system icon index
SHGFI_LINKOVERLAY = 0x000008000, // put a link overlay on icon
SHGFI_SELECTED = 0x000010000, // show icon in selected state
SHGFI_ATTR_SPECIFIED = 0x000020000, // get only specified attributes
SHGFI_LARGEICON = 0x000000000, // get large icon
SHGFI_SMALLICON = 0x000000001, // get small icon
SHGFI_OPENICON = 0x000000002, // get open icon
SHGFI_SHELLICONSIZE = 0x000000004, // get shell size icon
SHGFI_PIDL = 0x000000008, // pszPath is a pidl
SHGFI_USEFILEATTRIBUTES = 0x000000010 // use passed dwFileAttribute
}

#endregion

#region Get Folder Icons

[DllImport("Shell32.dll")]
private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes,
out SHFILEINFO psfi, uint cbfileInfo, SHGFI uFlags);

public static Icon GetIcon(string strPath, bool large)
{
SHFILEINFO info = new SHFILEINFO(true);
int cbFileInfo = Marshal.SizeOf(info);
SHGFI flags;
if (large)
flags = SHGFI.SHGFI_ICON | SHGFI.SHGFI_LARGEICON;
else
flags = SHGFI.SHGFI_ICON | SHGFI.SHGFI_SMALLICON ;

SHGetFileInfo(strPath, 256, out info, (uint)cbFileInfo, flags);
try
{
return Icon.FromHandle(info.hIcon);
}
catch
{
return null;
}
}
ZiRRen 2007-05-15
  • 打赏
  • 举报
回复
学习中.
qwer9947 2007-05-15
  • 打赏
  • 举报
回复
c++的
qwer9947 2007-05-15
  • 打赏
  • 举报
回复
::SHGetFileInfo()

// example...
SHFILEINFO sfInfo;

::memset(&sfInfo, 0, sizeof(sfInfo));
::SHGetFileInfo(cstrFilePath, 0, &sfInfo, sizeof(sfInfo), SHGFI_SMALLICON|SHGFI_ICON);
shinaterry 2007-05-15
  • 打赏
  • 举报
回复
.
xiaoliangwh 2007-05-15
  • 打赏
  • 举报
回复
http://download.csdn.net/
dugupiaoyun 2007-05-15
  • 打赏
  • 举报
回复
你在百度里搜索一个"图标挖掘机",这个东西不用你去写代码直接挖到嘛
LeoMaya 2007-05-15
  • 打赏
  • 举报
回复
啊啊~~

路过
khler 2007-05-15
  • 打赏
  • 举报
回复
1、如果是非exe文件,则要到注册表中找关联程序,提取关联程序的图表
2、如果是exe文件,直接提取
khler 2007-05-15
  • 打赏
  • 举报
回复
C++好整,C#就不知道了
xiaomatian 2007-05-15
  • 打赏
  • 举报
回复
以前在C++下看过这样的功能。具体忘了。
yc_8301 2007-05-15
  • 打赏
  • 举报
回复
帮顶。。
smartstar2005 2007-05-15
  • 打赏
  • 举报
回复
我曾经做过,直接调用API就可以实现.具体忘了是哪个函数,去查查看吧
Alvin709 2007-05-15
  • 打赏
  • 举报
回复
API
spkl1 2007-05-15
  • 打赏
  • 举报
回复
不错``学习下
甴曱 2007-05-11
  • 打赏
  • 举报
回复
参考:http://www.codeproject.com/cs/files/fileicon.asp
加载更多回复(9)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧