Как нарисовать элемент в окне рабочего стола Windows с Win32 SDK
У меня есть файл в окне рабочего стола 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;
}