社区
进程/线程/DLL
帖子详情
SHGetFileInfo 调用N次后罢工。怎么回事。
gaoyue_qq_1664507529
2012-02-26 05:18:54
我用CListCtr做了一个,类似资源管理器,查看目录文件的东东,使用SHGetFileInfo 文件相关信息。我运行程序,查看了一个system32运行结果正确,接着查其它目录,SHGetFileInfo 结果没有得到图标信息,返回值为NULL,下断点,参数传递没有问题的,这是为什么呢。。。。。按理说,参数没问题,每次运行结果,都相同才对啊。。。。。
...全文
95
11
打赏
收藏
SHGetFileInfo 调用N次后罢工。怎么回事。
我用CListCtr做了一个,类似资源管理器,查看目录文件的东东,使用SHGetFileInfo 文件相关信息。我运行程序,查看了一个system32运行结果正确,接着查其它目录,SHGetFileInfo 结果没有得到图标信息,返回值为NULL,下断点,参数传递没有问题的,这是为什么呢。。。。。按理说,参数没问题,每次运行结果,都相同才对啊。。。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gaoyue_qq_1664507529
2012-02-27
打赏
举报
回复
问题解决了,是因为FileInfo.hIcon资源没有释放掉。
CImageList *old1,*old2;
old1=m_listCtrl.SetImageList(pImageListNormal,LVSIL_NORMAL);
if(old1)
delete old1;//这么写只是释放了CImageList 但里面放置的图标资源并没有释放掉,所以导致资源泄漏了。
old2=m_listCtrl.SetImageList(pImageListSmall,LVSIL_SMALL);
if(old2)
delete old2;
非常感谢“列宁”同志。。。
gaoyue_qq_1664507529
2012-02-26
打赏
举报
回复
已经看过了,内存,最高时占用:20.000K左右;最少5.000K左右。当出毛病的时候,内存使用。6。000K左右。好像没什么异常啊。唉,这个问题,真难搞啊。。。
Lactoferrin
2012-02-26
打赏
举报
回复
去掉SHGFI_SYSICONINDEX试试
我原来做这样的程序时好像就是因为没有释放hIcon导致失败
gaoyue_qq_1664507529
2012-02-26
打赏
举报
回复
SHGetFileInfo(str, 0, &FileInfo, sizeof(FileInfo),SHGFI_ICON|SHGFI_SYSICONINDEX );
返回值,非0值。
Lactoferrin
2012-02-26
打赏
举报
回复
你看一下你的进程占多少内存
gaoyue_qq_1664507529
2012-02-26
打赏
举报
回复
CImageList *old1,*old2;
old1=m_listCtrl.SetImageList(pImageListNormal,LVSIL_NORMAL);
if(old1)
delete old1;//这么写的,
old2=m_listCtrl.SetImageList(pImageListSmall,LVSIL_SMALL);
if(old2)
delete old2;
Lactoferrin
2012-02-26
打赏
举报
回复
你是不是没有释放hIcon,占得太多了
Lactoferrin
2012-02-26
打赏
举报
回复
SHGetFileInfo返回值多少
gaoyue_qq_1664507529
2012-02-26
打赏
举报
回复
pImageListNormal->Add(FileInfo.hIcon);流览一阵后,这里:FileInfo.hIcon为0,但FileInfo.iIcon有值
gaoyue_qq_1664507529
2012-02-26
打赏
举报
回复
//是一个普通目录或文件名;
CFileFind finder;
BOOL bWorking = finder.FindFile(m_strDir+L"\\*.*");//如果能找到,则strPath是一个目录,否则是一个普通文件
int index=0;
while (bWorking)
{
bWorking = finder.FindNextFile();
if(finder.IsDots()) //如果找到的是点,结束本次循环。
{
continue;
}
SHFILEINFO FileInfo;
FileInfo.hIcon=0;
memset(&FileInfo,0,sizeof(SHFILEINFO));
CString str=finder.GetFilePath();
if(finder.IsDirectory())
{
SHGetFileInfo(str, 0, &FileInfo, sizeof(FileInfo),SHGFI_ICON|SHGFI_SYSICONINDEX );
}else
{
SHGetFileInfo(str, 0, &FileInfo, sizeof(FileInfo),SHGFI_ICON|SHGFI_SYSICONINDEX );
}
pImageListNormal->Add(FileInfo.hIcon);
pImageListSmall->Add(FileInfo.hIcon);
m_listCtrl.InsertItem(0,finder.GetFileName(),index++);
}
Lactoferrin
2012-02-26
打赏
举报
回复
代码是什么
(c#)使用
SH
Get
File
Info
获取文件或文件夹图标,显示在listview中
使用
SH
Get
File
Info
获取文件或文件夹图标,显示在listview中 c#编写的,英文注释 图标显示的非常完美 非常完美
获取系统中可用的驱动器列表,C#源代码[DllImport("
sh
ell32")]
获取系统中可用的驱动器列表,C#源代码[DllImport("
sh
ell32")] private static extern int
SH
Get
File
Info
(string pszPath, int dw
File
Attributes, ref
SH
FILE
INFO
psfi, int cb
File
Info
, int uFlags); const int
SH
GFI_ICON = 0x0100; const int
SH
GFI_LARGEICON = 0x0000;
易语言API取文件图标信息
易语言API取文件图标信息源码系统结构:获取文件关联信息,DrawIcon,DeleteObject,
SH
Get
File
Info
,GetDC,ReleaseDC,DrawIconEx, ======窗口程序集1 || ||------__启动窗口_创建完毕 || ||------_按钮_选择文件_被单击
用VC++6.0开发的进程管理器原代码
用
SH
Get
File
Info
()提取图标
易语言ftp服务器
易语言ftp服务器源码,ftp服务器,
SH
Get
File
Info
,DLL命令1
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章