• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

知识库(1)-如何在Win2K中使用SHMultiFileProperties

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 13次 | 进入软件测试论坛讨论

领测软件测试网

在Win2k中SHMultiFileProperties函数不能用正确的剪贴板格式查询IdataObject

症状

     当应用程序调用SHMultiFileProperties函数为一个或多个文件显示Shell属性对话框时无法使用CFSTR_SHELLIDLIST中的剪贴板格式来查询一列文件提供的IdataObject。

原因

     在Win2K中,Shell32.dll维持一组已注册的剪贴板格式。当一个自定义的IdataObject实现被传递给SHMultiFileProperties,Shell32.dll的剪贴板格式数组可能没有被初始化。结果是SHMultiFileProperties使用0作为剪贴板格式Id来调用IDataObject::GetData

解决方法

    在调用SHMultiFileProperties之前,调用的应用程序必须确保Shell32.dll已经初始化它的剪贴板格式数组。下面的函数通过创建一个IdataObject来强制Shell32.dll去初始化它的剪贴板格式数组。

 

STDAPI_(void) ForceShellToRegisterClipboardFormats(void){   LPITEMIDLIST pidlDrives;   IShellFolder* psfDesktop;   IDataObject* pdata;   HRESULT hr;    hr = SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &pidlDrives);   if (SUCCEEDED(hr))   {      hr = SHGetDesktopFolder(&psfDesktop);      if (SUCCEEDED(hr))      {         hr = psfDesktop->GetUIObjectOf(NULL,                                         1,                                         (LPCITEMIDLIST*)&pidlDrives,                                        IID_IDataObject,                                         NULL,                                         (void**)&pdata);         if (SUCCEEDED(hr))         {            pdata->Release();         }         psfDesktop->Release();      }      ILFree(pidlDrives);   }}

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网