У меня есть файл в окне рабочего стола Windows. Я хочу нарисовать его на заказ вместо обычного значка и текста. Я почти реализую это с помощью следующих шагов,
1. Создайте dll, в которой реализован интерфейс IExtractIcon, затем зарегистрируйте расширение оболочки обработчика значков для файла, чтобы сделать dll загруженным с помощью explorer.exe.
2. в функции dllmain библиотеки dll создайте подкласс в окне рабочего стола для создания пользовательского чертежа.
Это почти сработало, но все еще есть некоторые проблемы:
1. В winxp, dll загружается только один раз. после перезагрузки ПК, DLL не будет загружен, за исключением того, что я создал другой файл с тем же расширением. Я думаю, причина в том, что рабочий стол кешировал иконку, поэтому ему не нужно загружать dll для извлечения иконок. Но почему win7 работает.
Что я могу сделать, чтобы система всегда загружала dll?
или есть какой-нибудь другой способ заставить explorer.exe автоматически загружать мою dll?
вот код IExtractIcon:
HRESULT CShellIcon::GetIconLocation(UINT uFlags, LPWSTR szIconFile, UINT cchMax, LPINT piIndex, UINT* pwFlags)
{
// I inject the dll to subclass the desktop window
SubclassDesktop();
*piIndex = 0;
*pwFlags = GIL_DONTCACHE | GIL_NOTFILENAME | GIL_PERINSTANCE;
return S_FALSE;
}
HRESULT CShellIcon::Extract(LPCTSTR pszFile, UINT nIconIndex, HICON* phiconLarge, HICON* phiconSmall, UINT nIconSize )
{
phiconLarge = NULL;
phiconSmall = NULL;
return S_OK;
}
Задача ещё не решена.