Create TOC

2006년 3월 8일

Windows Icon Cache를 다시 생성하기

가끔 Windows Icon Cache 가 깨져서 다시 생성해야 할 필요가 있다. 보통은 icon cache 파일을 삭제후 재부팅 하거나 바탕화면 등록 정보에서 icon 크기를 바꾸면 된다.

아래 코드는 바탕화면 icon 크기를 변경시켜서 icon cache를 다시 생성하게 만드는 코드이다.

#include <atlbase.h>

/**	@brief	윈도우의 아이콘 캐쉬를 다시 빌드한다.
 *
 *	@author	Yun-yong Choi
 */
void __cdecl RebuildIconCache(void)
{
	CRegKey RegKey;		/**< registry interface */
	int OldSize = 0;	/**< 원래 shell icon 크기를 저장 */

	LRESULT lRet = RegKey.Open(HKEY_CURRENT_USER,
		"Control Panel\\Desktop\\WindowMetrics",
		KEY_ALL_ACCESS);

	if (lRet == ERROR_SUCCESS)
	{
		DWORD dwCnt;
		CHAR buf[BUFSIZ] = {0, };

		dwCnt = BUFSIZ - 1;

		lRet = RegKey.QueryValue(buf, "Shell Icon Size", &dwCnt);
		if (lRet != ERROR_SUCCESS)
		{
			RegKey.Close();
			return;
		}

		OldSize = atoi(buf);
		wsprintf(buf, "%ld", OldSize + 1);
		RegKey.SetValue(buf, "Shell Icon Size");
		SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE,
			SPI_SETICONMETRICS, (LPARAM)( "WindowMetrics" ));

		if (OldSize > 0)
		{
			wsprintf(buf, "%ld", OldSize);
			RegKey.SetValue(buf, "Shell Icon Size");

			SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE,
				SPI_SETICONMETRICS, (LPARAM)( "WindowMetrics" ));
		}
		else
		{
			RegKey.DeleteValue("Shell Icon Size");

			SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE,
				SPI_SETICONMETRICS, (LPARAM)( "WindowMetrics" ));
		}
		RegKey.Close();
	}
}