2014-03-06 34 views
3

我要確定程序,如果我的外殼擴展被稱爲一個上下文菜單句柄拖N - 降處理器 。我已經使用相同的CLSID在正確的位置註冊了我的外殼擴展。確定是否外殼擴展被稱爲上下文菜單處理程序或一拖N - 降處理器

註冊地:

[HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\{E991C840-C1EB-455C-AD64-282473005C58}] 
@="Test Context Menu" 

[HKEY_CLASSES_ROOT\Directory\shellex\DragDropHandlers\TestDragDrop] 
@="{E991C840-C1EB-455C-AD64-282473005C58}" 

我有註冊沒有問題,我的分機被加載。

我想檢查要在的DllGetClassObjectIShellExtInit ::初始化最佳場所。

+0

「我已將我的外殼擴展註冊到具有相同CLSID的適當位置。」 - 那是什麼意思?什麼位置是(發佈註冊表鍵路徑)。 – sashoalm

+0

另外,發佈一些代碼。你想從哪裏確定?從哪個入口點?你是否來自'IContextMenu :: InvokeCommand'? – sashoalm

+2

「我有兩家公司,一家比薩店和一家美髮店,我把它們放在電話號碼簿中,電話號碼相同,當有人撥打這個號碼時,我怎麼知道他們是打電話訂購披薩還是安排剪頭髮?」答:獲得兩個電話號碼。使用一個比薩店和一個美髮沙龍。翻譯:註冊兩個CLSID,一個用於上下文菜單,另一個用於拖放處理程序。 –

回答

3

您可以檢測到shell只想在IShellExtInit.Initialize中工作的擴展類型。對於上下文菜單處理程序pidlFolder爲零,對於拖放處理程序pidlFolder是文件夾的PIDL。

+0

不完全如此,對於後臺上下文菜單也是pidlFolder設置的。 – Xearinox

+0

我同意你,但在@ user2120666的問題的情況下,這並不重要,因爲當用戶調用文件夾背景的上下文菜單時,將不會調用在*鍵下注冊的上下文菜單。 –

+0

不要試圖根據間接證據預測未來。 –

0

如果您爲多個擴展使用相同的CLSID,那麼它不知道哪個擴展正在實例化,除了QueryInterface()時系統查詢IContextMenu。如果你真的需要區分,最好只使用單獨的CLSID,就像Raymond Chen說的那樣。他們可以映射到相同的DLL,但是這會讓您的代碼有機會知道哪個CLSID正在實例化。

相關問題