在DirectShow的中,有很多函数需要Filter的CLSID.在系统中怎么么才能知道各个FIlter的CLASS ID?谢谢各位指点.

解决方案 »

  1.   

    注册表中有的。注册表中Class名字可以通过GraphFilter得到。
    不过对于常用的一些最好是找点书籍或者资料什么的。省事:)
      

  2.   

    DirectShow有枚举器可以枚举。
    DirectShow预定义的Filter,其CLSID有DXSDK的头文件中有定义。
    第三方的Filter,可以从注册表中得到。
      

  3.   

    如何从注册表中得到第三方的CLSID?在注册表的那些位置可以找到?
      

  4.   

    dxsdk工具graphedt.exe可以查看系统中的所有filter,而且分类了.
      

  5.   

    如果是sdk带的filter,都可以通过包含头文件方式!!不过所有的直接在GraphEdit里面选择对应filter后都有其CLSID的显示信息
      

  6.   

    第3方的如果没有头文件!就在GraphEdit里面选择那个filter!就有它的CLSID和友好名信息,在使用时:DEFINE_CLSID(CLSID_XXXX,
                 x,x,x,x,x,x,x,x,x....)//这里x就是看到的CLSID就可以了!!如果编译出现CLSID_XXXX不确定的外部符号错误!!加上#include <iniguid.h>//这里头文件名好象写错了,记不清楚了,自己看下
      

  7.   

    在GraphEdit里有的并没有给出CLSID.比如在我的电脑中Video Compressors下的Microsoft MPEG-4 VKI Codec V1,给出代码为{33D9A760-90C8-11D0-BD43-00A0C911CE86}\mpg4,在在注册表中查的前面部分为CLSID_VideoCompressorCategory,搜索得到MPG4,找到一个组件,Friendliname 为 Microsoft MPEG-4 VKI Codec V1,对应的CLSID为64697663-0000-0010-00aa00389b71,但是同时该键值父目录对应的所有子项CLSID均为64697663-0000-0010-00aa00389b71,一直在这里迷惑.还请给位指点.
      

  8.   

    我晕!!楼主该好好看看CLSID,那个字符串按照CLSID形式分开就可以了
      

  9.   

    迷惑的是该键值父目录所有对应的子项CLSID均相同!!不同的只有Friendliname和FccHandler.
    我在程序中如何把他们区分开来,找到自己需要的?
      

  10.   

    每个filter的CLSID应该是唯一,也不同的吧?
      

  11.   

    每个filter的CLSID当然是不同的,给你举个例:比如我写了个filter它的CLSID这样:
    DEFINE_GUID(CLSID_PushTest,
    0xfd501041, 0x8ebe, 0x11ce, 0x81, 0x83, 0x00, 0xaa, 0x00, 0x57, 0x7d, 0xa1);在GraphEdit里面的Filter Moniker里面信息就是:@device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\{FD501041-8EBE-11CE-8183-00AA00577DA1}
      

  12.   

    注意这个字符串FD501041-8EBE-11CE-8183-00AA00577DA1,自己解析得到CLSID