Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Can we enforce shell extension to call IShellIconOverlayIdentifier::GetOverlayInfo explicitly?

36 views
Skip to first unread message

rahul.s...@gmail.com

unread,
Nov 13, 2013, 6:40:36 AM11/13/13
to
We read a registry key in GetOverlayInfo() and IsMemberOf() methods to determine whether to show the overlay icons or not. From both of these methods we return S_FALSE if registry key is not set.

Problem is that when GetOverlayInfo() is called registry key is not set but it is set later in the session. I've notice once GetOverlayInfo() returns S_FALSE, shell doesn't call IsMemberOf() further.

This registry key is set/reset from a different process(our application) while GetOverlayInfo() and GetOverlayInfo() runs within explorer (which is obvious)

I am looking for ideas to make my scenario work i.e. After registry key is toggled somehow GetOverlayInfo() should be called at least once. I've not found any way to do on web so far.

I tried to delete "Iconcache.db" file but that didn't enforce explorer to call GetOverlayInfo() again.

Can we clear explorer's cache programatically ? That might enforce explorer to call GetOverlayInfo() again?

I read somewhere that there was article published in 98 issue of Window's Journal(WDJ) under title "rebuilding internet shell icons cache". Perhaps this article will help but I don't find it on web. Anybody has clue ?

Deanna Earley

unread,
Nov 13, 2013, 7:50:22 AM11/13/13
to
On 13/11/2013 11:40, rahul.s...@gmail.com wrote:
> We read a registry key in GetOverlayInfo() and IsMemberOf() methods
> to determine whether to show the overlay icons or not. From both of
> these methods we return S_FALSE if registry key is not set.
>
> Problem is that when GetOverlayInfo() is called registry key is not
> set but it is set later in the session. I've notice once
> GetOverlayInfo() returns S_FALSE, shell doesn't call IsMemberOf()
> further.

GetOverlayInfo() gets global state, and is not file/object specific,
especially as it's called during initialization.
Why not always return meaningful data and just put the condition on your
IsMemberOf() implementation?
This will be called first before subsequent GetOverlayInfo() calls so
won't impact performance.

--
Deanna Earley (dee.e...@icode.co.uk)
iCatcher Development Team
http://www.icode.co.uk/icatcher/

iCode Systems

(Replies direct to my email address will be ignored. Please reply to the
group.)
0 new messages