2016-05-18 59 views
0

我目前正在嘗試使用Visual C++實現Windows資源管理器的覆蓋圖標。爲此,我閱讀了有關Microsoft MSDN的信息(說我必須實施IShellIconOverlayIdentifier)以及Internet上的其他一些資源。Windows資源管理器覆蓋圖標 - 如何啓動?

我的問題是,我無法讓程序運行。我想,當我能夠簡單地顯示任何圖標時,實施邏輯來選擇正確的圖標是沒有問題的。

首先我嘗試創建一個Windows服務,但似乎我無法實現接口。現在我更改爲一個DLL,並且沒有任何編譯器錯誤了,但是當我嘗試註冊時,它說該模塊已加載,但未找到入口點DllRegisterServer。問題似乎是我沒有COM服務器,但我真的需要它嗎?

我還在CodeProject.com上找到了一個指南,它也沒有任何編譯錯誤,只是沒有任何錯誤地顯示沒有圖標。

那麼,任何人都可以簡要總結一下如何開始實現覆蓋圖標與Visual Studio和C + +(服務/ DLL/...,任何編譯器選項設置,什麼是我需要顯示簡單的圖標)?

+2

你會更好地選擇上述三種解決方案之一,在問題中提供一些代碼,並解釋您遇到的困難以及需要幫助的問題。 – Tas

+1

也許它是與這個問題有關[TortoiseSVN圖標沒有顯示在Windows 7下](http://stackoverflow.com/questions/1057734/tortoisesvn-icons-not-showing-up-under-windows-7) –

回答

0

您所指的「圖標」是資源管理器進程中顯示的圖標。這意味着你是另一個過程中的客人,你必須按照他們的規則行事。

如果你明白這一點,這很清楚你的代碼爲什麼不能在服務中工作。服務不是資源管理器進程。

如果你明白這一點,很明顯你爲什麼必須提供DllRegisterServer()。 Explorer調用它。

C++編譯器不知道Explorer.EXE的特定規則。但是,您可以通過將頭文件包含在定義的位置來告訴編譯器關於IShellIconOverlayIdentifier。這將告訴編譯器它實際上是一個COM接口。

您可能應該先嚐試一些簡單的COM示例,然後才能將圖標提供給另一個不受控制的進程。您無法在調試模式下編譯Explorer.EXE,因此您只能看到任何問題的一半。

相關問題