大家好..我最近写了一个Shell Namespace,主要是完成查看指定文件里面的信息,比如一个压缩文件.
     
     现在的问题是怎么样才能打开一个压缩文件就直接在Explorer里面显示其内容,不知道点击的文件的路径怎么传递到Shell namespace中.
    
     MSDN上说 explorer /e,::{CLSID},objectname 后面这个objectname会转换成PIDL传递到IPersistFolder::initialize()里面去,但是为什么我用SHGetPathFromIDList得到的总是当前Shell Namespace的CLSID呢?     另外,不在桌面上显示虚拟文件夹的图标可不可以呢?我在HKEY/Microsoft/windows/CurrentVersion/Explorer/Desktop/我的CLSID ,如果删除掉"我的CLSID",那么这个虚拟文件夹则不能用..    
请教大家了!!在线等待

解决方案 »

  1.   

    双击的文件,首先会检查是否有文件关联,然后调用对应的关联程序执行,文件路径可以用执行参数的方式传入;所以你可以对需要的文件类型设置好对应的文件关联,将其关联到你自己的程序,自己的程序将其解压缩,然后调用explorer指定解压缩出来的路径查看就可以了。
      

  2.   

    关键就是怎么从Shell namespace得到Explorer的路径,文件关联做好了
      

  3.   

    他说的是你关联文件,把文件的类型关联到你自己写的程序里,然后在你的程序里通过GetCommandLine等命令行参数进行文件路径的读取。。得到文件路径后再启动 explorer显示
      

  4.   

    explorer /e,::{CLSID},objectname你要把objectname的PIDL与它上一级的PIDL合并后再来用 SHGetPathFromIDList
      

  5.   

     我也是在程序中这样写的.
     但是问题来了 
                      explorer /e,::{CLSID},objectname 默认会把objectname传到IPersistFolder::initialize(PIDL)   
                      这个PIDL就是参数,但是我用SHGetPathFromIDList只能得到CLSID,并不能得到objectname啊