2008-12-04 97 views
1

我已經制作了一個工具欄,我想從用C#編寫的systray應用程序啓用,實際的工具欄啓用是使用[DLLImport]從C++部件完成的。windows xp和vista任務欄上的工具欄

目前我使用:

SHLoadInProc(__uuidof(MyBandLoader)) 

但這種失敗在Vista上(SHLoadInProc未實現任何更多),而在Windows XP SP2與IE6(重新啓動後,快速啓動工具欄中消失)。我使用CocreateInstance()和BandSite-> AddBand(),但是使用工具欄dll的guid給了我一個分段錯誤或者地址欄。

是否有另一種方式來啓用XP和Vista上的另一個程序工具欄?

+0

你是否找到了答案?我試圖做同樣的事情(從NSIS安裝程序自動啓用工具欄) – 2008-12-07 05:12:11

回答

0

我已經使用過那個,但它只告訴你必須製作一個工具欄,而不是如何從另一個程序啓用它。

1

在Vista上,有一個名爲ITrayDeskBand的新記錄不佳的界面。

通過CoCreateInstance創建一個實例,然後在返回的指針上調用ShowDeskBand([工具欄的CLSID])(在C++中 - 我不確定如何在C#中爲PInvoke創建所有相關位) - 可能更容易編寫一個簡單的C++ dll來公開這個函數)

這隻適用於Vista,但在XP上,您需要繼續上面的SHLoadInProc方法,因此您需要測試操作系統版本並執行相應的操作。

要小心,如果你從CodeProject上的文章提起代碼 - 它充滿微妙的錯誤,雖然很多人在評論中討論

0

一個不應該使用.NET創建資源管理器內的任何COM對象處理。如果另一個.net組件使用已經加載到探索者進程中的不同框架版本,這將不起作用。每個進程只有一個.net框架。 MS從來沒有提出任何關於以任何.net語言開發桌面帶的樣本。

Vista上唯一的方法就是使用ITrayDeskBand接口來顯示工具欄。但是,這會向用戶顯示一個確認框,他可以拒絕顯示工具欄。