2014-11-21 53 views
0

我從CLSID中手動從DLL加載一些未註冊的DirectShow過濾器,我想找出過濾器的名稱(因爲它出現在GraphEdit中)。如何獲得未註冊的DirectShow過濾器的默認過濾器名稱

我試過使用IBaseFilter:QueryFilterInfo方法,但只有當過濾器是圖形的一部分時纔會工作,即使如此,它還是會在過濾器添加到圖形時返回給過濾器的名稱。

我在尋找默認過濾器將其實例添加到GraphEdit圖形中時的名稱。是否有可能得到這個,以及如何?

回答

1

過濾器圖形在過濾器加入圖形時爲過濾器分配唯一的名稱。該名稱可以由過濾器加法器建議,然後在碰撞過濾器圖形的情況下可以附加一個數字作爲後綴。當加法器沒有給出名稱時,過濾器圖形將採用來自QueryFilterInfo的「默認」名稱或過濾器註冊信息,其中友好名稱也是註冊的一部分。

註冊名稱由Filter Mapper管理,可通過程序訪問。然後反過來它將信息保存在類別鍵下的註冊表中, HKEY_CLASSES_ROOT\CLSID\{083863F1-70DE-11D0-BD40-00A0C911CE86}\Instance鍵。

+0

所以,除非過濾器註冊友好的名稱將不可用(通過過濾器映射器),正確的? (正如我所提到的,我檢查了QueryFilterInfo並且它沒有返回任何東西) – 2014-11-21 18:03:40

+0

我不記得這種行爲記錄,所以它不在我頭頂。過濾器的名稱只是一個故障排除/開發幫助程序,所以如果它是空的就好了。我想圖表將使用此方法中過濾器返回的名稱(如果有的話)作爲默認名稱。但是,標準實現不會這樣做。所以你會發現大多數未註冊的過濾器都添加了「0002」這樣的名稱。 – 2014-11-21 22:54:13

+0

是的,它不是強制性的,*大多數*(我有的所有過濾器)都沒有實現它。所以這非常沒用。我已經放棄了這一點,並且已經轉移到不同的API表面,允許用戶在添加過濾器時爲過濾器提供名稱。謝謝! – 2014-11-22 01:10:47