3
一旦我安裝完成安裝我的應用程序的EXE的新版本,我想告訴瀏覽器使用新的exe文件的圖標,其快捷方式。但是,我無法弄清楚如何做到這一點。如何讓Windows資源管理器刷新其圖標?
從網上閱讀,它看起來像問題是,system image list是緩存舊版本的圖標。我打過電話SHChangeNotify與SHCNE_UPDATEIMAGE
參數。我試過打電話SHUpdateImage。我甚至試過sledgehammer approach的廣播WM_SETTINGCHANGE
。似乎沒有任何工作。
這是完全可能的,我只是在做一些錯誤。任何幫助,將不勝感激。
警告:非常難看的測試代碼如下。
#if 1
// First attempt: using shell functions
wchar_t icon_path[MAX_PATH];
int icon_index;
UINT icon_flags;
IShellFolder *desktop_folder;
IShellFolder *sub_folder;
IExtractIcon *extract_icon;
LPITEMIDLIST pidl;
SHGetDesktopFolder(&desktop_folder);
wchar_t *folder_path = L"C:\\Documents and Settings\\All Users\\Start Menu\\Programs\\MyCompany\\";
desktop_folder->ParseDisplayName(NULL, NULL, folder_path, NULL, &pidl,
NULL);
desktop_folder->BindToObject(pidl, NULL, IID_IShellFolder,
(void**) &sub_folder);
sub_folder->ParseDisplayName(NULL, NULL, L"MyApp.lnk", NULL, &pidl,
NULL);
sub_folder->GetUIObjectOf(NULL, 1, (LPCITEMIDLIST*) &pidl,
IID_IExtractIcon, NULL, (void**) &extract_icon);
extract_icon->GetIconLocation(0, icon_path, MAX_PATH,
&icon_index, &icon_flags);
SHFILEINFO sfi;
DWORD_PTR result = SHGetFileInfo(shortcut_path, 0, &sfi, sizeof(sfi),
SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
SHUpdateImage(icon_path, icon_index, icon_flags, sfi.iIcon);
// sfi.iIcon should be correct, but we'll try both, just for fun...
SHChangeNotify(SHCNE_UPDATEIMAGE, SHCNF_DWORD, NULL,
(LPCVOID) icon_index);
SHChangeNotify(SHCNE_UPDATEIMAGE, SHCNF_DWORD, NULL,
(LPCVOID) sfi.iIcon);
#else
// Second attempt: broadcasting a settings change
HKEY reg;
RegCreateKeyEx(HKEY_CURRENT_USER,
L"Control Panel\\Desktop\\WindowMetrics", 0, NULL, 0,
KEY_SET_VALUE, NULL, ®, NULL);
DWORD value;
value = 33;
RegSetValueEx(reg, L"Shell Icon Size", 0, REG_DWORD, (BYTE*) &value,
sizeof(value));
value = 32;
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS,
(int) L"WindowMetrics");
RegSetValueEx(reg, L"Shell Icon Size", 0, REG_DWORD, (BYTE*) &value,
sizeof(value));
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS,
(int) L"WindowMetrics");
#endif
你試過只是問好嗎? (對不起,忍不住了;) – 2009-11-18 17:56:43
@Dustin:讓我試試。開始 - >運行 - >「資源管理器 - 刷新 - 我的圖標 - 請」。 Explorer回覆:「路徑'--refresh-my-icons-please'不存在或不是目錄。」不,沒有工作。 – 2009-11-18 18:01:08