热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

高手帮忙!windowsshell接口编程,关于BindToObject和IExtractImage.

这个程序的目的是要得到一个文件的IExtractImage接口,然后取得它的缩略图。但是到了GetUIObjectOf就写不下去了老是出错,请各位大虾帮我看看吧!IShellFolder
这个程序的目的是要得到一个文件的IExtractImage接口,然后
取得它的缩略图。但是到了GetUIObjectOf就写不下去了老是出错,请各位大虾帮我看看吧!
   IShellFolder * mf ;
   IShellFolder * folder ;
   IExtractImage * extractImage ;
   LPITEMIDLIST pidl ;
   unsigned long * char_len = new unsigned long();

   OleCheck(SHGetDesktopFolder(&mf)) ;
   if( !OpenDialog1->Execute())
   {
      ShowMessage("打开文件失败!") ;
      return ;
   }

   LPOLESTR * dispName ;
   AnsiString path = ExtractFilePath(OpenDialog1->FileName) ;
   wchar_t * n = new wchar_t[50];
   path.WideChar( n , path.Length() + 1) ;
   dispName = & n ;

//问题一:下边这句,如果用LPITEMIDLIST * pidl这种方式声明pidl,在下句
//中把& pidl 换成pidl,程序就会出错。为什么呢?

   OleCheck(mf->ParseDisplayName( this, NULL, * dispName , char_len , & pidl , 0 ));
   LPVOID ppvResult ;
   LPVOID un ;
   OleCheck( mf->BindToObject( (LPCITEMIDLIST)( pidl) , NULL , IID_IShellFolder , & ppvResult ) );
   folder =(IShellFolder*) ( ppvResult ) ;
   //问题二:执行到下句就出错:“参数错误”
   OleCheck( folder->GetUIObjectOf(NULL , 1 , (LPCITEMIDLIST *)&pidl , IID_IExtractImage , NULL , & un ) ) ;
   extractImage = (IExtractImage *) (&un) ;
//问题三:以下还要通过IExtractImage::GetLocation()和IExtractImage::Extract
//得到我要的缩略图,但我实在写不下去了,请高手帮帮忙吧!
   delete [] n ;

14 个解决方案

#1


头疼!

#2


帮你顶

#3


我也帮你顶!关注

#4


问题一: LPITEMIDLIST * pidl 是定义了一个指向LPITEMIDLIST的指针,而它需要的是LPITEMIDLIST这个指针的地址所以会出错。
问题二: 第三个参数 (LPCITEMIDLIST *)&pidl 转换出错。 同上,参数需要的是LPCIITEMIDIST不是LPCITEMIDLIST*
第三个问题: 我没有做过IExtractImage,不知道你所说的缩略图是否就是图标,如果你需要的是得到图标。
    前一段时间做的windows shell 忘得差不多了。 说错了请大家见谅

#5


咳咳
http://www.csdn.net/develop/read_article.asp?id=22243
我没用IExtractImage……

#6


帮你顶

#7


回HalfWorm:

函数声明中要的就是LPITEMIDLIST *,而不是LPITEMIDLIST,我的意思是
LPITEMIDLIST * pidl;
mf->ParseDisplayName( ... pidl ... )
和下边的程序应该是等价的
LPITEMIDLIST pidl;
mf->ParseDisplayName( ... &pidl ... )
可是使用第一种形式会出错,API调用中我好几次遇到这种情况,为什么呢?

蒋大虾的大作正在研究中..............

#8


请问蒋大虾,你获取缩略图用的是不是GetIconOf()?我看MSDN中的函数声明是这样的:
HRESULT GetIconOf(
    LPCITEMIDLIST pidl,
    UINT flags,
    LPINT lpIconIndex
   );
其中lpIconIndex的取值如下:
0  Document (blank page, not associated)  
1  Document (with data on the page)  
2  Application (file extension must be .exe, .com, or .bat)  
3  Folder (plain)  
4  Folder (open)  
从上边看只能取文件夹.doc、.exe等文件的图标,没说能取.bmp、.jpg等文件的图标啊?
而且你在这个参数的位置上用的是CFolderItemInfo *类型的变量,我查不到这种类型的帮助,不知道它究竟是什么东东,看起来象是MFC。
我没学过MFC,请大虾多说两句,谢谢!

#9


我怀疑是不是我的库文件太老了,我访问了蒋大虾文章中的SDK下载地址,照ms的提示做了安装,不知道还需不需要做些别的什么工作来让BCB使用新的SDK?

#10


CFolderItemInfo是我自己写的类。bmp/jpg显示的时候用的是IPicture来显示文件内容。你可能需要修改选项中的包含文件和库文件的顺序

#11


CFolderItemInfo是我自己写的类。bmp/jpg显示的时候用的是IPicture来显示文件内容。你可能需要修改选项中的包含文件和库文件的顺序

#12


经过了漫长的、艰苦卓绝的猜测、修改,终于解决了所有的编译错误和运行时的异常,现在只剩最后一个问题了:我已经得到了HBITMAP类的结果,但我不知到它是个什么东东,以及如何用TImage来显示它,请各位大虾帮帮忙!

#13


对于这个类不是太熟...

#14


我自己解决了,哈哈!现在已经成功显示.ai,.psd等类型的图片了!
方法是
Image1->Picture->Bitmap->Handle=...

推荐阅读
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文介绍了解决mysql 5.1启动问题的方法,通过修改my.ini文件中的相关配置,包括innodb_data_home_dir和skip-innodb等,可以解决启动问题。同时还介绍了如何调整内存池来存储metadata信息。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 本文介绍了在Windows系统下,下载并解压lua5.3后得到的四个文件:lua53.dll, lua53.exe, luac53.exe和wlua53.exe的功能。其中,前三个文件的作用已知,但对于wlua53.exe的具体用法,作者通过查阅资料得出该文件与图形界面的窗口相关,但未找到相关说明。因此,作者希望能够请教关于wlua53.exe的具体用法。 ... [详细]
author-avatar
Smile--麦芽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有