Как нарисовать элемент в окне рабочего стола Windows с Win32 SDK

У меня есть файл в окне рабочего стола Windows. Я хочу нарисовать его на заказ вместо обычного значка и текста. Я почти реализую это с помощью следующих шагов,
1. Создайте dll, в которой реализован интерфейс IExtractIcon, затем зарегистрируйте расширение оболочки обработчика значков для файла, чтобы сделать dll загруженным с помощью explorer.exe.
2. в функции dllmain библиотеки dll создайте подкласс в окне рабочего стола для создания пользовательского чертежа.

Это почти сработало, но все еще есть некоторые проблемы:
1. В winxp, dll загружается только один раз. после перезагрузки ПК, DLL не будет загружен, за исключением того, что я создал другой файл с тем же расширением. Я думаю, причина в том, что рабочий стол кешировал иконку, поэтому ему не нужно загружать dll для извлечения иконок. Но почему win7 работает.
Что я могу сделать, чтобы система всегда загружала dll?

  1. Файл всегда имеет расширение в файловой системе, но когда он отображается на рабочем столе, расширение может не отображаться. Как я могу получить полное имя файла в соответствии с элементом просмотра списка на рабочем столе?

или есть какой-нибудь другой способ заставить 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;
}

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]