Buy now, 799$, online ordering, delivery by email

Iconman Sample

This is one of the samples that comes with the MFC version of NSELib.

This sample is available for Delphi too.

This sample demonstrates the basic workings of NSELib. We started from a project that was generated by the wizard.

This sample shows how to enumerate items in a namespace extension, how to add items to the context menu, and how to manipulate the folder tasks and some other basic shell functionality

IconManExtension.h

This is the header file for the class CIconManExtension.

#if !defined(AFX_ICONMANEXTENSION_H__05185F68_7623_4939_9FD8_D33E8755373E__INCLUDED_)
#define AFX_ICONMANEXTENSION_H__05185F68_7623_4939_9FD8_D33E8755373E__INCLUDED_

#include "NameSpaceExtension.h"

//TODO: Standard columns - change and add as you need

#define ICONMAN_COLUMN_NAME		0
#define ICONMAN_COLUMN_INDEX	1
#define ICONMAN_COLUMN_DEFAULT  2

#define SIG_ICONMAN 'ICONMAN'



class CNameSpaceItem;
class CIconManExtension : public CNameSpaceExtension
{
public:

	DECLARE_DYNCREATE(CIconManExtension);

	CIconManExtension(CNameSpaceExtension *pParent = NULL);
	virtual REFCLSID GetClassID();
	virtual BOOL GetFirstRegularItem(CNameSpaceItem** pItem, LPDWORD pCookie, DWORD grfFlags);
	virtual BOOL GetNextRegularItem(const CNameSpaceItem* pLastItem, CNameSpaceItem** pItem, LPDWORD pCookie, DWORD grfFlags);
	virtual CNameSpaceExtension *CreateFolder(CNameSpaceItem* pItem);
	virtual CShellUIObject *CreateUIObject(UINT cidl, const CNameSpaceItem** aItems, HWND hWndOwner);
	virtual CString GetWebPage();
	virtual CString			GetColumnTitle	(UINT iCol);

	virtual CString			GetDisplayName(DWORD uFlags);
	virtual ULONG			GetAttributes();
	virtual JUNCTIONPOINT	GetJunctionPoint();
	virtual CPCATEGORY		GetCPCategory();
	virtual CString			GetProtocolPrefix();
	virtual CNameSpaceItem*	ParseItemName(LPCTSTR szName);
	virtual CString			GetFileType();
	virtual CString			GetFileExtension();

	virtual BOOL GetDefaultGroupingColumn(ULONG *pulResult);
	virtual BOOL CanCategorizeOn(int nIndex);
	virtual CString GetCategorizerName(UINT iCol);
	virtual CString GetCategoryName(UINT iCol, UINT iCat);
	virtual LPITEMIDLIST GetRelatedPlace(ULONG ulIndex);
	virtual CString GetExtraTasksTitle(UINT cidl, const CNameSpaceItem **aPidls);
	virtual CString GetExtraTaskName(int nIndex, UINT cidl, const CNameSpaceItem **aPidls);
	virtual int GetExtraTaskIcon(int nIndex, UINT cidl, const CNameSpaceItem **aPidls);
	virtual BOOL EnableExtraTask(int nIndex, UINT cidl, const CNameSpaceItem **aItems);
	virtual CString GetExtraTasksTitleTooltip(UINT cidl, const CNameSpaceItem **aItems);
	virtual CString GetExtraTaskTooltip(int nIndex, UINT cidl, const CNameSpaceItem **aItems);
	virtual BOOL InvokeExtraTask(int nIndex, UINT cidl, const CNameSpaceItem **aItems);
	virtual BOOL IsViewModeSupported(FOLDERVIEWMODE ViewMode);
	virtual BOOL GetZone(URLZONE *pZone);
	CString GetWebViewTheme();
};

#endif // !defined(AFX_ICONMANEXTENSION_H__05185F68_7623_4939_9FD8_D33E8755373E__INCLUDED_)

IconManExtension.cpp

This file implements the class CIconManExtension.

Here you can see how items are enumerated. See functions GetFirtstRegularItem and GetNextRegularItem.

You can also see how to specify icons for your items.

Furthermore, you can see how the folder tasks can be manipulated.

#include "stdafx.h"
#include "IconManExtension.h"
#include "IconManItem.h"
#include "IconManUIObject.h"
#include 
#include "resource.h"


IMPLEMENT_DYNCREATE(CIconManExtension, CNameSpaceExtension);

extern CLSID	CLSID_IconManExtension;

CIconManExtension::CIconManExtension(CNameSpaceExtension *pParent) :
CNameSpaceExtension(pParent)
{
}

REFCLSID CIconManExtension::GetClassID()
{
	return CLSID_IconManExtension;
}


BOOL CIconManExtension::GetFirstRegularItem(CNameSpaceItem** pItem, LPDWORD pCookie, DWORD grfFlags)
{
	//TODO: Initialize the item
	*pCookie = 0;

	*pItem = new CIconManItem(this, 0);
	(*pCookie)++;
	return TRUE;
}

BOOL CIconManExtension::GetNextRegularItem(const CNameSpaceItem* pLastItem, CNameSpaceItem** pItem, LPDWORD pCookie, DWORD grfFlags)
{
	//TODO: Initialize the item, return TRUE if OK.

	if (*pCookie < 40)
	{
		*pItem = new CIconManItem(this, *pCookie);
		(*pCookie)++;
		return TRUE;
	}
	
	return FALSE;
}


CNameSpaceExtension *CIconManExtension::CreateFolder(CNameSpaceItem* pItem)
{
	//TODO: Initialize the new folder

	return new CIconManExtension(this);
}

CShellUIObject *CIconManExtension::CreateUIObject(UINT cidl, const CNameSpaceItem** aItems, HWND hWndOwner)
{
	return new CIconManUIObject(this, cidl, aItems, GetPidl(), hWndOwner);
}


CString CIconManExtension::GetWebPage()
{
	return "folder.htt";
}



CString CIconManExtension::GetDisplayName(DWORD uFlags)
{
	if (!m_pParent)
	{
		return "System Icons (MFC)";
	}
	return CNameSpaceExtension::GetDisplayName(uFlags);
}

ULONG	CIconManExtension::GetAttributes()
{
	return	SFGAO_CANLINK | SFGAO_CANRENAME |
			SFGAO_BROWSABLE | SFGAO_FOLDER;
}


JUNCTIONPOINT	CIconManExtension::GetJunctionPoint() 
{
	return JUNCTIONPOINT_CONTROLPANEL; 
}

CString			CIconManExtension::GetProtocolPrefix()
{
	//TODO: Add a protocol prefix here to support URL protocol browsing
	return "";
}


CString			CIconManExtension::GetFileType()
{
	//TODO: Add a file class here to support in-place file type browsing (ie. "txtfile")
	return "";
}

CString			CIconManExtension::GetFileExtension()
{
	//TODO: Add a file type here to associate the file class with a file extension on registration (ie. "txt")
	return "";
}


CNameSpaceItem*	CIconManExtension::ParseItemName(LPCTSTR szName)
{
	//TODO: Override this method if you want to use custom parsing for paths or URLS
	//		For example - ftp://ftp.mysite.com/
	//		Default implementation enumerates the folder and compares display names to find the item

	return CNameSpaceExtension::ParseItemName(szName);
}


CPCATEGORY	CIconManExtension::GetCPCategory()
{
	return CPCATEGORY_APPEARANCE;
}
		

CString	CIconManExtension::GetColumnTitle(UINT iCol)
{
	switch(iCol)
	{
		case ICONMAN_COLUMN_NAME:
		{
			return "Name";
		}
		case ICONMAN_COLUMN_INDEX:
		{
			return "Index";
		}
		default:
		{
			return "";
		}
	}
}

BOOL CIconManExtension::GetDefaultGroupingColumn(ULONG *pulResult)
{
	*pulResult = ICONMAN_COLUMN_DEFAULT;
	return TRUE;
}


BOOL CIconManExtension::CanCategorizeOn(int nIndex)
{
	return nIndex == ICONMAN_COLUMN_DEFAULT;
}

CString CIconManExtension::GetCategorizerName(UINT iCol)
{
	if (iCol == ICONMAN_COLUMN_DEFAULT)
	{
		return "Default or changed";
	}
	else
	{
		return "";
	}
}

CString CIconManExtension::GetCategoryName(UINT iCol, UINT iCat)
{
	if (iCol == ICONMAN_COLUMN_DEFAULT)
	{
		if (iCat == 1)
		{
			return "Changed";
		}
		else
		{
			return "Default";
		}
	}
	return "";
}


LPITEMIDLIST CIconManExtension::GetRelatedPlace(ULONG ulIndex)
{
	switch(ulIndex)
	{
		case 0:
		{
			LPITEMIDLIST pidlResult;
			::SHGetSpecialFolderLocation(NULL, CSIDL_CONTROLS, &pidlResult);
			return pidlResult;
		}
		case 1:
		{
			LPITEMIDLIST pidlResult;
			::SHGetSpecialFolderLocation(NULL, CSIDL_PRINTERS, &pidlResult);
			return pidlResult;
		}
		case 2:
		{
			LPITEMIDLIST pidlResult;
			::SHGetSpecialFolderLocation(NULL, CSIDL_FONTS, &pidlResult);
			return pidlResult;
		}
		default:
		{
			return NULL;
		}
	}
}

CString CIconManExtension::GetExtraTasksTitle(UINT cidl, const CNameSpaceItem **aItems)
{
	return "Icon Tasks";
}

CString CIconManExtension::GetExtraTaskName(int nIndex, UINT cidl, const CNameSpaceItem **aItems)
{
	switch(nIndex)
	{
		case 0:
		{
			return "Change this icon";
		}
		case 1:
		{
			return "Restore the default icon";
		}
		default:
		{
			return "";
		}
	}
}

int CIconManExtension::GetExtraTaskIcon(int nIndex, UINT cidl, const CNameSpaceItem **aItems)
{
	return IDI_FOLDER;
}

BOOL CIconManExtension::EnableExtraTask(int nIndex, UINT cidl, const CNameSpaceItem **aItems)
{
	switch(nIndex)
	{
		case 0:
		{
			return cidl == 1;
		}
		case 1:
		{
			return cidl != 0;
		}
		default:
		{
			return FALSE;
		}
	}
}

CString CIconManExtension::GetExtraTasksTitleTooltip(UINT cidl, const CNameSpaceItem **aItems)
{
	return "Lets you change this icon.";
}

CString CIconManExtension::GetExtraTaskTooltip(int nIndex, UINT cidl, const CNameSpaceItem **aItems)
{
	switch(nIndex)
	{
		case 0:
		{
			return "Lets you choose an icon to replace the selected one.";
		}
		case 1:
		{
			return "Lets you restore the default for the selected icons.";
		}
		default:
		{
			return "";
		}
	}
}


BOOL CIconManExtension::InvokeExtraTask(int nIndex, UINT cidl, const CNameSpaceItem **aItems)
{
	switch(nIndex)
	{
		case 0:
		{
			if (cidl == 1)
			{
				return static_cast(aItems[0])->Change();
			}
			else
			{
				return FALSE;
			}
		}
		case 1:
		{
			for (int i = 0; i < cidl; i++)
			{
				static_cast(aItems[0])->RestoreDefault();
			}
			return TRUE;
		}
		default:
		{
			return FALSE;
		}
	}
}

CString CIconManExtension::GetWebViewTheme()
{
	return "picture";
}

BOOL CIconManExtension::IsViewModeSupported(FOLDERVIEWMODE ViewMode)
{
	return TRUE;
}

BOOL CIconManExtension::GetZone(URLZONE *pZone)
{
	*pZone = URLZONE_LOCAL_MACHINE;
	return TRUE;
}

IconManItem.h

This is the header file for class CIconManItem.

#ifndef _AFX_ICONMANITEM_H__F279D727_5799_402B_B64A_7CD3A8F59313__IS_INCLUDED
#define _AFX_ICONMANITEM_H__F279D727_5799_402B_B64A_7CD3A8F59313__IS_INCLUDED


#include "NameSpaceItem.h"

class CNameSpaceExtension;


class CIconManItem : public CNameSpaceItem
{
public:
	DECLARE_SERIAL(CIconManItem);

	CIconManItem() { m_bQueriedRegistry = FALSE; }
	CIconManItem(CNameSpaceExtension* pFolder, int nIndex);

	virtual ~CIconManItem();

	virtual CString		GetDisplayName(DWORD uFlags) const;
	virtual CString		GetInfoTip(void) const;
	virtual BOOL		GetFindData(WIN32_FIND_DATAW *pFindData) const;

	virtual int			GetIconIndex(UINT uFlags, UINT *puiReturnFlags) const;
	virtual ULONG		GetAttributes() const;
	virtual CString		GetItemDetail(UINT iCol) const;
	virtual CString		GetStorageType() const;
	virtual int			CompareTo(UINT iCol, CNameSpaceItem* pOtherItem) const;
	virtual BOOL		Rename(CString sNewName);
	virtual BOOL		Delete();

	virtual CString		GetIconModule() const;
	virtual BOOL		IsValidObject() const;
	virtual CString		GetFileAttributes() const;


	virtual void Serialize( CArchive& ar );

	virtual DWORD		GetCategory(int nColumnIndex) const;
	void				QueryRegistry() const;
	BOOL				Change() const;
	BOOL				RestoreDefault() const;

protected:

	int m_nIndex;
	mutable CString m_strIconModule;
	mutable int m_nIconIndex;
	mutable BOOL m_bDefault;
	mutable BOOL m_bQueriedRegistry;

};

#endif

IconManItem.cpp

This file implements the class CIconManItem.

This file shows how to specify basic information for items: icons, details the details view, support for show in groups.

#include "stdafx.h"
#include 

#include "IconManItem.h"
#include "IconManExtension.h"
#include "NSEUtils.h"

IMPLEMENT_SERIAL(CIconManItem, CNameSpaceItem, 1);

char *names[] = {
	"Unknown File Type",
	"Default document",
	"Default application",
	"Closed folder",
	"Open folder",
	"5 1/4 floppy",
	"3 1/2 floppy",
	"Removable drive",
	"Hard disk drive",
	"Network drive",
	"network drive offline",
	"CD drive",
	"RAM disk",
	"Entire network",
	"Network Service",
	"My Computer",
	"Printer Manager",
	"Network Neighborhood",
	"Network Workgroup",
	"Start Menu Programs",
	"Start Menu Documents",
	"Start Menu Settings",
	"Start Menu Find",
	"Start Menu Help",
	"Start Menu Run",
	"Start Menu Suspend",
	"Start Menu Docking",
	"Start Menu Shutdown",
	"Sharing overlay (hand)",
	"Shortcut overlay (small arrow)",
	"Default printer overlay (small tick)",
	"Recycle bin empty",
	"Recycle bin full",
	"Dial-up Network Folder",
	"Desktop",
	"Control Panel",
	"Program Group",
	"Printer",
	"Font Folder",
	"Taskbar",
	"Audio CD",
	"Novell Tree",
	"(Unknown)",
	"IE favorites",
	"Start Menu Logoff",
	"(Unknown)",
	"(Unknown)",
	"Lock",
	"Hibernate"
};




CIconManItem::CIconManItem(CNameSpaceExtension* pFolder, int nIndex) : CNameSpaceItem(pFolder)
{
	m_nIndex = nIndex;
}


CIconManItem::~CIconManItem()
{
}

void CIconManItem::Serialize( CArchive& ar )
{
	CNameSpaceItem::Serialize( ar );

	//TODO: Store/Read all members ie;
	if( ar.IsStoring() )
	{
		ar << m_nIndex;
	} else {
		ar >> m_nIndex ;
	}
}


BOOL CIconManItem::IsValidObject() const
{
	//TODO: Validate your object, the call the base class
	return CNameSpaceItem::IsValidObject();
}



CString CIconManItem::GetStorageType() const
{
	//TODO: Return the storage type - ie. "Word Document"
	return "Icon";
}

CString CIconManItem::GetInfoTip() const
{
	//TODO: Return the info tip - ie. "Contains text"
	return "InfoTip";
}

BOOL CIconManItem::Rename(CString sNewName)
{
	//TODO: Rename the item (cause the GetDisplayName method to return sNewName) and
	//		perform any operation to rename the object referred to.
	//		Return TRUE if OK
	return FALSE;
}

BOOL CIconManItem::Delete()
{
	//TODO: Perform any operation to delete the object referred to.
	//		Return TRUE if OK
	return FALSE;
}

CString CIconManItem::GetDisplayName(DWORD uFlags) const
{
	//TODO:	Return the display name of your object
	return names[m_nIndex];
}

ULONG CIconManItem::GetAttributes() const
{
	//TODO: Return SFGAO_ attributes as returned by IShellFolder::GetAttributes for this item

	return	0;
}

BOOL CIconManItem::GetFindData(WIN32_FIND_DATAW *pFindData) const
{
	//TODO: Fill in the WIN32_FIND_DATAW for this item, and return TRUE if OK.
	return FALSE;
}

int CIconManItem::GetIconIndex(UINT uFlags, UINT *puiReturnFlags) const
{
	if (!m_bQueriedRegistry)
	{
		QueryRegistry();
	}
	if (m_bDefault)
	{
		return m_nIndex;
	}
	else
	{
		return m_nIconIndex;
	}
}

CString CIconManItem::GetIconModule() const
{
	if (!m_bQueriedRegistry)
	{
		QueryRegistry();
	}
	if (m_bDefault)
	{
		char pszSysDir[MAX_PATH];
		::GetSystemDirectory(pszSysDir, MAX_PATH);
		CString strResult = pszSysDir;
		if (strResult.Right(1) != "\\")
		{
			strResult += "\\";
		}
		strResult += "shell32.dll";
		return strResult;
	}
	else
	{
		return m_strIconModule;
	}
}

void CIconManItem::QueryRegistry() const
{
	m_bQueriedRegistry = TRUE;
	m_bDefault = TRUE;
	HKEY hKey = NULL;
	if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE,
					   "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Icons",
					   REG_OPTION_NON_VOLATILE,
					   KEY_QUERY_VALUE,
					   &hKey) == ERROR_SUCCESS)
	{
		CString strIndex;
		strIndex.Format("%d", m_nIndex);
		DWORD dwType;
		char pszFromRegistry[MAX_PATH];
		DWORD dwLen = MAX_PATH;
		if (::RegQueryValueEx(hKey,
							  strIndex,
							  NULL,
							  &dwType,
							  (LPBYTE)pszFromRegistry,
							  &dwLen) == ERROR_SUCCESS)
		{
			if (pszFromRegistry[dwLen-1] != 0)
			{
				pszFromRegistry[dwLen] = 0;
			}
			char *pszComma = strrchr(pszFromRegistry, ',');
			if (pszComma)
			{
				*pszComma = 0;
				m_strIconModule = pszFromRegistry;
				sscanf(pszComma+1, "%d", &m_nIconIndex);
				m_bDefault = FALSE;
			}
		}
		::RegCloseKey(hKey);
	}
}

CString CIconManItem::GetItemDetail(UINT iCol) const
{
	switch(iCol)
	{
		case ICONMAN_COLUMN_NAME:
		{
			return CNameSpaceItem::GetItemDetail(iCol);
		}
		case ICONMAN_COLUMN_INDEX:
		{
			CString strResult;
			strResult.Format("%d", m_nIndex);
			return strResult;
		}
		default:
		{
			return "";
		}
	}
}


CString		CIconManItem::GetFileAttributes() const
{
	//TODO: Return attributes as a string (ie. "Read Only, System")
	return "";
}


int			CIconManItem::CompareTo(UINT iCol, CNameSpaceItem* pOtherItem) const
{
	//TODO: Compare the two items with reference to the column number.

	switch(iCol)
	{
		case ICONMAN_COLUMN_NAME:
		{
			return stricmp(names[m_nIndex],names[((CIconManItem *)pOtherItem)->m_nIndex]);
		}
		case ICONMAN_COLUMN_INDEX:
		{
			int nIndex1 = m_nIndex;
			int nIndex2 = ((CIconManItem *)pOtherItem)->m_nIndex;
			if (nIndex1 == nIndex2)
			{
				return 0;
			} 
			else if (nIndex1 > nIndex2)
			{
				return 1;
			}
			else
			{
				return -1;
			}
		}
		default:
		{
			CString str1 = GetItemDetail(iCol);
			CString str2 = GetItemDetail(iCol);
			return str1.Compare(str2);
		}
	}
}


DWORD CIconManItem::GetCategory(int nColumnIndex) const
{
	if (!m_bQueriedRegistry)
	{
		QueryRegistry();
	}
	if (nColumnIndex == ICONMAN_COLUMN_DEFAULT)
	{
		if (m_bDefault)
		{
			return 0;
		}
		else
		{
			return 1;
		}
	}
	return 0;
}

typedef WINSHELLAPI int (WINAPI *fnFileIconInit)(BOOL bFullInit);



BOOL CIconManItem::Change() const
{
	if (!m_bQueriedRegistry)
	{
		QueryRegistry();
	}

	WCHAR wModule[MAX_PATH];
	if (m_bDefault)
	{
		char pszSysDir[MAX_PATH];
		::GetSystemDirectory(pszSysDir, MAX_PATH);
		CString strShell32 = pszSysDir;
		if (strShell32.Right(1) != "\\")
		{
			strShell32 += "\\";
		}
		strShell32 += "shell32.dll";
		MultiByteToWideChar(CP_ACP, 0, strShell32, -1, wModule, MAX_PATH);
	}
	else
	{
		MultiByteToWideChar(CP_ACP, 0, m_strIconModule, -1, wModule, MAX_PATH);
	}

	int nIndex = m_bDefault ? m_nIndex : m_nIconIndex;

	if (::PickIconDlg(NULL, wModule, MAX_PATH, &nIndex) != 0)
	{
		char pszModuleAnsi[MAX_PATH];
		WideCharToMultiByte(CP_ACP, 0, wModule, -1, pszModuleAnsi, MAX_PATH, NULL, NULL);
		char pszName[24];
		sprintf(pszName, "%d", m_nIndex);
		HKEY hKey;
		DWORD dwDisp;
		if (::RegCreateKeyEx(HKEY_LOCAL_MACHINE,
						   "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Icons",
						   0,
						   NULL,
						   REG_OPTION_NON_VOLATILE,
						   KEY_SET_VALUE,
						   NULL,
						   &hKey,
						   &dwDisp) == ERROR_SUCCESS)
		{
						   
			if (nIndex == m_nIndex && wcsstr(wModule, L"shell32.dll"))
			{
				::RegDeleteValue(hKey, pszName);
				m_bDefault = TRUE;
			}
			else
			{
				char pszValue[MAX_PATH];
				strcpy(pszValue, pszModuleAnsi);
				m_strIconModule = pszValue;
				strcat(pszValue, ",");
				char pszIndex[24];
				sprintf(pszIndex, "%d", nIndex);
				strcat(pszValue, pszIndex);
				::RegSetValueEx(hKey,
								pszName,
								0,
								REG_SZ,
								(LPBYTE)pszValue,
								strlen(pszValue)+1);
				m_bDefault = FALSE;
				m_nIconIndex = nIndex;
			}
			::RegCloseKey(hKey);
			m_pFolder->UpdateAddedItem(const_cast(this), false);
			SHUpdateImage(pszModuleAnsi, m_nIconIndex, 0, m_nIndex);
			HICON hNewIconSmall;
			HICON hNewIconLarge;
			SHFILEINFO shfi;
			ExtractIconEx(m_strIconModule, m_nIconIndex, &hNewIconLarge, &hNewIconSmall, 1);
			HIMAGELIST hilLarge = (HIMAGELIST)SHGetFileInfo("*.dll", FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
			ImageList_ReplaceIcon(hilLarge, m_nIndex, hNewIconLarge);
			HIMAGELIST hilSmall = (HIMAGELIST)SHGetFileInfo("*.dll", FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
			ImageList_ReplaceIcon(hilSmall, m_nIndex, hNewIconSmall);
			SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST | SHCNF_FLUSHNOWAIT, NULL, NULL);
			SHChangeNotify(SHCNE_UPDATEIMAGE, SHCNF_IDLIST | SHCNF_FLUSHNOWAIT, NULL, NULL);

			DWORD dwOldValue = ::GetSystemMetrics(SM_CXICON);
			if (::RegCreateKeyEx(HKEY_CURRENT_USER,
				"Control Panel\\Desktop\\WindowMetrics",
				0,
				NULL,
				REG_OPTION_NON_VOLATILE,
				KEY_QUERY_VALUE|KEY_SET_VALUE,
				NULL,
				&hKey,
				&dwDisp) == ERROR_SUCCESS)
			{
				char pszSize[128];
				DWORD dwType;
				DWORD dwLen = 128;
				if (::RegQueryValueEx(hKey,
									  "Shell Icon Size",
									  NULL,
									  &dwType,
									  (LPBYTE)pszSize,
									  &dwLen) == ERROR_SUCCESS)
				{
					sscanf(pszSize, "%d", &dwOldValue);
				}
				sprintf(pszSize, "%d", dwOldValue-1);
				::RegSetValueEx(hKey,
								"Shell Icon Size",
								0,
								REG_SZ,
								(LPBYTE)pszSize,
								strlen(pszSize)+1);
				::RegCloseKey(hKey);
			}

			SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, (LPARAM)"WindowMetrics", SMTO_NORMAL|SMTO_ABORTIFHUNG, 10000, NULL);

			if (::RegCreateKeyEx(HKEY_CURRENT_USER,
				"Control Panel\\Desktop\\WindowMetrics",
				0,
				NULL,
				REG_OPTION_NON_VOLATILE,
				KEY_QUERY_VALUE|KEY_SET_VALUE,
				NULL,
				&hKey,
				&dwDisp) == ERROR_SUCCESS)
			{
				char pszSize[128];
				sprintf(pszSize, "%d", dwOldValue);
				::RegSetValueEx(hKey,
								"Shell Icon Size",
								0,
								REG_SZ,
								(LPBYTE)pszSize,
								strlen(pszSize)+1);
				::RegCloseKey(hKey);
			}


			SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, (LPARAM)"WindowMetrics", SMTO_NORMAL|SMTO_ABORTIFHUNG, 10000, NULL);

			HMODULE hShell32 =  ::LoadLibrary("shell32.dll");
			fnFileIconInit f = (fnFileIconInit)::GetProcAddress(hShell32, (char *)660);
			f(TRUE);
			::FreeLibrary(hShell32);
		}
	}

	return TRUE;
}

BOOL CIconManItem::RestoreDefault() const
{
	char pszName[24];
	sprintf(pszName, "%d", m_nIndex);
	HKEY hKey;
	if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE,
					   "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Icons",
					   REG_OPTION_NON_VOLATILE,
					   KEY_SET_VALUE,
					   &hKey) == ERROR_SUCCESS)
	{
					   
		::RegDeleteValue(hKey, pszName);
		m_bDefault = TRUE;
		::RegCloseKey(hKey);
		m_pFolder->UpdateAddedItem(const_cast(this), false);
		SHUpdateImage(m_strIconModule, m_nIconIndex, 0, m_nIndex);
		HICON hNewIconSmall;
		HICON hNewIconLarge;
		SHFILEINFO shfi;
		ExtractIconEx(m_strIconModule, m_nIconIndex, &hNewIconLarge, &hNewIconSmall, 1);
		HIMAGELIST hilLarge = (HIMAGELIST)SHGetFileInfo("*.dll", FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
		ImageList_ReplaceIcon(hilLarge, m_nIndex, hNewIconLarge);
		HIMAGELIST hilSmall = (HIMAGELIST)SHGetFileInfo("*.dll", FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
		ImageList_ReplaceIcon(hilSmall, m_nIndex, hNewIconSmall);
		SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST | SHCNF_FLUSHNOWAIT, NULL, NULL);
		SHChangeNotify(SHCNE_UPDATEIMAGE, SHCNF_IDLIST | SHCNF_FLUSHNOWAIT, NULL, NULL);
		DWORD dwOldValue = ::GetSystemMetrics(SM_CXICON);
		DWORD dwDisp;
		if (::RegCreateKeyEx(HKEY_CURRENT_USER,
			"Control Panel\\Desktop\\WindowMetrics",
			0,
			NULL,
			REG_OPTION_NON_VOLATILE,
			KEY_QUERY_VALUE|KEY_SET_VALUE,
			NULL,
			&hKey,
			&dwDisp) == ERROR_SUCCESS)
		{
			char pszSize[128];
			DWORD dwType;
			DWORD dwLen = 128;
			if (::RegQueryValueEx(hKey,
								  "Shell Icon Size",
								  NULL,
								  &dwType,
								  (LPBYTE)pszSize,
								  &dwLen) == ERROR_SUCCESS)
			{
				sscanf(pszSize, "%d", &dwOldValue);
			}
			sprintf(pszSize, "%d", dwOldValue-1);
			::RegSetValueEx(hKey,
							"Shell Icon Size",
							0,
							REG_SZ,
							(LPBYTE)pszSize,
							strlen(pszSize)+1);
			::RegCloseKey(hKey);
		}

		SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, (LPARAM)"WindowMetrics", SMTO_NORMAL|SMTO_ABORTIFHUNG, 10000, NULL);

		if (::RegCreateKeyEx(HKEY_CURRENT_USER,
			"Control Panel\\Desktop\\WindowMetrics",
			0,
			NULL,
			REG_OPTION_NON_VOLATILE,
			KEY_QUERY_VALUE|KEY_SET_VALUE,
			NULL,
			&hKey,
			&dwDisp) == ERROR_SUCCESS)
		{
			char pszSize[128];
			sprintf(pszSize, "%d", dwOldValue);
			::RegSetValueEx(hKey,
							"Shell Icon Size",
							0,
							REG_SZ,
							(LPBYTE)pszSize,
							strlen(pszSize)+1);
			::RegCloseKey(hKey);
		}


		SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, (LPARAM)"WindowMetrics", SMTO_NORMAL|SMTO_ABORTIFHUNG, 10000, NULL);

		HMODULE hShell32 =  ::LoadLibrary("shell32.dll");
		fnFileIconInit f = (fnFileIconInit)::GetProcAddress(hShell32, (char *)660);
		f(TRUE);
		::FreeLibrary(hShell32);
	}
	return TRUE;
}

IconManUIObject.h

This is the header file for class CIconManUIObject.

#if !defined(AFX_ICONMANUIOBJECT_H__19DCFD61_7BCD_40AA_9B81_CF1BDA6C9C9A__INCLUDED_)
#define AFX_ICONMANUIOBJECT_H__19DCFD61_7BCD_40AA_9B81_CF1BDA6C9C9A__INCLUDED_

#include "ShellUIObject.h"

class CNameSpaceItem;
class CIconManUIObject : public CShellUIObject
{
public:
	CIconManUIObject(CNameSpaceExtension *pFolder, UINT cidl, const CNameSpaceItem** aItems, LPCITEMIDLIST basePidl, HWND hWndOwner = NULL);
	CIconManUIObject();

	DECLARE_DYNCREATE(CIconManUIObject);

	virtual REFCLSID GetClassID();
	virtual UINT FillContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags);
	virtual BOOL InvokeCommand(LPCMINVOKECOMMANDINFO lpici);
	virtual BOOL InvokeDefaultCommand();
	virtual BOOL GetFormatEtc(ULONG iIndex, FORMATETC *pfetc);
	virtual BOOL IsClipFormatSupported(CLIPFORMAT cf);
	virtual BOOL GetData(CLIPFORMAT cf, HGLOBAL hGlobal);
	virtual DWORD GetDataSize(CLIPFORMAT cf);
	BOOL Change();
	BOOL RestoreDefault();
};

#define ICONMAN_COMMAND_CHANGE 1
#define ICONMAN_COMMAND_RESTOREDEFAULT 2
const int nIconManCommands = 2;

#endif

IconManUIObject.cpp

This file implements class CIconManUIObject.

This file shows how to add items to the context menu.

#include "stdafx.h"
#include "IconManUIObject.h"
#include "IconManApp.h"
#include "IconManItem.h"
#include 

extern CLSID CLSID_IconManUIObject;


IMPLEMENT_DYNCREATE(CIconManUIObject, CShellUIObject);


UINT MyILGetSize(LPCITEMIDLIST pidl)
{
	UINT cbTotal = 0;
	LPITEMIDLIST pidlTemp = (LPITEMIDLIST) pidl;

	if(pidlTemp)
	{
		while(pidlTemp->mkid.cb)
		{
			cbTotal += pidlTemp->mkid.cb;
			pidlTemp = (LPITEMIDLIST)(LPBYTE) ( ((LPBYTE)pidlTemp) + pidlTemp->mkid.cb);
		}  
		cbTotal += sizeof(ITEMIDLIST);
	}
	return (cbTotal);
}



CIconManUIObject::CIconManUIObject() : CShellUIObject(NULL, NULL, NULL, NULL)
{
}



CIconManUIObject::CIconManUIObject(CNameSpaceExtension *pFolder, UINT cidl, const CNameSpaceItem** aItems, LPCITEMIDLIST basePidl, HWND hWndOwner) :
CShellUIObject(pFolder, cidl, aItems, basePidl, hWndOwner)
{
}

REFCLSID CIconManUIObject::GetClassID()
{
	return CLSID_IconManUIObject;
}

UINT CIconManUIObject::FillContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
{
	if (m_cidl == 1)
	{
		uFlags |= CMF_NODEFAULT;

		MENUITEMINFO mii;

		ZeroMemory(&mii, sizeof(mii));
		mii.cbSize = sizeof (mii);
		mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
		mii.wID = idCmdFirst + ICONMAN_COMMAND_CHANGE;
		mii.fType = MFT_STRING;
		mii.dwTypeData = TEXT("&Change");
		mii.fState = MFS_ENABLED | MFS_DEFAULT;
		InsertMenuItem(hmenu,
					   indexMenu++,
					   TRUE,
					   &mii);

		ZeroMemory(&mii, sizeof(mii));
		mii.cbSize = sizeof (mii);
		mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE;
		mii.wID = idCmdFirst + ICONMAN_COMMAND_RESTOREDEFAULT;
		mii.fType = MFT_STRING;
		mii.dwTypeData = TEXT("&Restore default");
		mii.fState = MFS_ENABLED;
		InsertMenuItem(hmenu,
					   indexMenu++,
					   TRUE,
					   &mii);
	}

	UINT result = idCmdFirst + nIconManCommands+1;

	if ((!(uFlags & CMF_DEFAULTONLY)) || m_cidl != 1)
	{
		result = CShellUIObject::FillContextMenu(hmenu, indexMenu, idCmdFirst+nIconManCommands, idCmdLast, uFlags);
	}
	return result;
}

BOOL CIconManUIObject::InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
{
	switch(LOWORD(lpici->lpVerb ))
	{
		case ICONMAN_COMMAND_CHANGE:
		{
			return Change();
		}
		case ICONMAN_COMMAND_RESTOREDEFAULT:
		{
			return RestoreDefault();
		}
	}
	return CShellUIObject::InvokeCommand(lpici);
}

BOOL CIconManUIObject::InvokeDefaultCommand()
{
	return CShellUIObject::InvokeDefaultCommand();
}

BOOL CIconManUIObject::GetFormatEtc(ULONG iIndex, FORMATETC *pfetc)
{
	if (iIndex == 0)
	{
		pfetc->cfFormat = ::NSEGetApp()->GetClipboardFormat(CFSTR_ICONMANITEMS);
		pfetc->dwAspect = DVASPECT_CONTENT;
		pfetc->lindex = -1;
		pfetc->ptd = NULL;
		pfetc->tymed = TYMED_HGLOBAL;
		return TRUE;
	}
	else
	{
		return CShellUIObject::GetFormatEtc(iIndex-1, pfetc);
	}
}

BOOL CIconManUIObject::IsClipFormatSupported(CLIPFORMAT cf)
{
	if (cf == ::NSEGetApp()->GetClipboardFormat(CFSTR_ICONMANITEMS))
	{
		return TRUE;
	}
	return CShellUIObject::IsClipFormatSupported(cf);
}

BOOL CIconManUIObject::GetData(CLIPFORMAT cf, HGLOBAL hGlobal)
{
	if (cf == ::NSEGetApp()->GetClipboardFormat(CFSTR_ICONMANITEMS))
	{
		BYTE *pData = (BYTE *)::GlobalLock(hGlobal);
		*(int *)pData = m_cidl;
		pData += sizeof(int);
		int iSize = ::ILGetSize(m_BasePidl);
		memcpy(pData, m_BasePidl, iSize);
		pData += iSize;
		memset(pData, 0, 4);
		pData += 4;
		for (int i = 0; i < m_cidl; i++)
		{
			iSize = ::ILGetSize(m_apidls[i]);
			memcpy(pData, m_apidls[i], iSize);
			pData += iSize;
			memset(pData, 0, 4);
			pData += 4;
		}
		return TRUE;
	}
	return CShellUIObject::GetData(cf, hGlobal);
}

DWORD CIconManUIObject::GetDataSize(CLIPFORMAT cf)
{
	int iSize = sizeof(int);
	iSize += ::ILGetSize(m_BasePidl)+4;
	for (int i = 0; i < m_cidl; i++)
	{
		iSize += ::ILGetSize(m_apidls[i])+4;
	}
	return iSize;
}

BOOL CIconManUIObject::Change()
{
	return static_cast(m_aItems[0])->Change();
}

BOOL CIconManUIObject::RestoreDefault()
{
	return static_cast(m_aItems[0])->RestoreDefault();
}

IconManApp.h

This file is generated by the wizard.

#if !defined(AFX_ICONMANAPP_H__93DAD5E2_C03B_41F1_A0FD_92BC3DF71138__INCLUDED_)
#define AFX_ICONMANAPP_H__93DAD5E2_C03B_41F1_A0FD_92BC3DF71138__INCLUDED_

#include "NameSpaceApp.h"


class CIconManApp : public CNameSpaceApp
{
public:
	virtual BOOL InitInstance();
	virtual int ExitInstance();
	virtual HRESULT RegisterServer();
	virtual HRESULT UnRegisterServer();
	virtual HRESULT GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID * ppv);
	virtual DWORD GetClipboardFormat(const char *pszClip);
protected:
	UINT m_cfIconManItems;
};

#define CFSTR_ICONMANITEMS "ClipFormat_IconMan_Items"

#endif // !defined(AFX_ICONMANAPP_H__93DAD5E2_C03B_41F1_A0FD_92BC3DF71138__INCLUDED_)

IconManApp.cpp

This file is generated by the wizard.

#include "stdafx.h"
#include "IconManApp.h"
#include "IconManFactory.h"
#include "IconManExtension.h"
#include "IconManUIObject.h"


CLSID	CLSID_IconManExtension, CLSID_IconManUIObject;

BOOL CIconManApp::InitInstance()
{
	::CLSIDFromString(L"{7105C4D8-F16E-4BB1-A524-39159491A937}", &CLSID_IconManExtension);
	::CLSIDFromString(L"{F048AD08-AF66-4413-9677-F8988A45BF5A}", &CLSID_IconManUIObject);

	m_cfIconManItems = ::RegisterClipboardFormat(CFSTR_ICONMANITEMS);
	return CNameSpaceApp::InitInstance();
}

int CIconManApp::ExitInstance()
{
	return CNameSpaceApp::ExitInstance();
}

DWORD CIconManApp::GetClipboardFormat(const char *pszClip)
{
	if (strcmp(pszClip, CFSTR_ICONMANITEMS) == 0)
	{
		return m_cfIconManItems;
	}
	return CNameSpaceApp::GetClipboardFormat(pszClip);
}

HRESULT CIconManApp::RegisterServer()
{
	if (!theFactory.Register())
	{
		return E_FAIL;
	}
	return NOERROR;
}

HRESULT CIconManApp::UnRegisterServer()
{
	if (!theFactory.Unregister())
	{
		return E_FAIL;
	}
	return NOERROR;
}

HRESULT CIconManApp::GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID * ppv)
{
	if (rclsid == CLSID_IconManExtension)
	{
		if (riid == IID_IClassFactory ||
			riid == IID_IUnknown)
		{
			*ppv = (IUnknown *)&theFactory;
			theFactory.AddRef();
			return NOERROR;
		}
		else
		{
			return E_NOINTERFACE;
		}
	}
	else if (rclsid == CLSID_IconManUIObject)
	{
		if (riid == IID_IClassFactory ||
			riid == IID_IUnknown)
		{
			*ppv = (IUnknown *)&theUIFactory;
			theUIFactory.m_pNameSpaceFactory = &theFactory;
			theUIFactory.AddRef();
			return NOERROR;
		}
		else
		{
			return E_NOINTERFACE;
		}
	}
	else
	{
		return CLASS_E_CLASSNOTAVAILABLE;
	}
}

CIconManApp theApp;



STDAPI DllRegisterServer()
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState( ));

	return NSEGetApp()->RegisterServer();
}

STDAPI DllUnregisterServer()
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState( ));

	return NSEGetApp()->UnRegisterServer();
}

STDAPI	DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID * ppv)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState( ));

	return NSEGetApp()->GetClassObject(rclsid, riid, ppv);
}


IconManFactory.h

This file is generated by the wizard.

#if !defined(AFX_ICONMANFACTORY_H__4D9AA7E3_FFB8_4BF7_A1D0_D2A5008BB177__INCLUDED_)
#define AFX_ICONMANFACTORY_H__4D9AA7E3_FFB8_4BF7_A1D0_D2A5008BB177__INCLUDED_

#include "NameSpaceFactory.h"
#include "ShellUIObject.h"


class CIconManFactory : public CNameSpaceFactory
{
public:
	virtual CNameSpaceExtension *CreateExtension();
	virtual CShellUIObject *CreateUIObject();
};

extern CIconManFactory theFactory;
extern CUIObjectFactory theUIFactory;

#endif // !defined(AFX_ICONMANFACTORY_H__4D9AA7E3_FFB8_4BF7_A1D0_D2A5008BB177__INCLUDED_)

IconManFactory.cpp

This file is generated by the wizard.

#include "stdafx.h"
#include "IconManFactory.h"
#include "IconManExtension.h"
#include "IconManItem.h"
#include "IconManUIObject.h"

CNameSpaceExtension *CIconManFactory::CreateExtension()
{
	return new CIconManExtension;
}

CShellUIObject *CIconManFactory::CreateUIObject()
{
	return new CIconManUIObject(NULL, 0, NULL, NULL);
}



CIconManFactory theFactory;
CUIObjectFactory theUIFactory;

stdafx.h

This file is generated by the wizard.

// stdafx.h : include file for standard system include files,
//  or project specific include files that are used frequently, but
//      are changed infrequently
//

#if !defined(AFX_STDAFX_H__79841AFD_4B25_4ADB_B972_10EA357CB7F2__INCLUDED_)
#define AFX_STDAFX_H__79841AFD_4B25_4ADB_B972_10EA357CB7F2__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define VC_EXTRALEAN		// Exclude rarely-used stuff from Windows headers

#include          // MFC core and standard components
#include          // MFC extensions

#ifndef _AFX_NO_OLE_SUPPORT
#include          // MFC OLE classes
#include        // MFC OLE dialog classes
#include         // MFC Automation classes
#endif // _AFX_NO_OLE_SUPPORT


#ifndef _AFX_NO_DB_SUPPORT
#include 			// MFC ODBC database classes
#endif // _AFX_NO_DB_SUPPORT

#ifndef _AFX_NO_DAO_SUPPORT
#include 			// MFC DAO database classes
#endif // _AFX_NO_DAO_SUPPORT

#include 		// MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include 			// MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT



#include 
#include "shlext.h"
#include "windefs.h"

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__79841AFD_4B25_4ADB_B972_10EA357CB7F2__INCLUDED_)

stdafx.cpp

This file is generated by the wizard.

#include "stdafx.h"

resource.h

This file is generated by the wizard.

//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by root.rc
//
#define IDM_EXPLORE                     1
#define IDM_OPEN                        2
#define IDM_PROPERTIES                  3
#define IDM_DELETE                      4
#define IDM_RENAME                      5
#define IDM_FIND                        6
#define IDM_COPY                        7
#define IDI_FOLDER                      20036
#define IDI_FOLDER_OPEN                 20037

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        20038
#define _APS_NEXT_COMMAND_VALUE         32772
#define _APS_NEXT_CONTROL_VALUE         20023
#define _APS_NEXT_SYMED_VALUE           20000
#endif
#endif

IconMan.rc

This file is generated by the wizard.

//Microsoft Developer Studio generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE DISCARDABLE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE DISCARDABLE 
BEGIN
    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
    "#define _AFX_NO_OLE_RESOURCES\r\n"
    "#define _AFX_NO_TRACKER_RESOURCES\r\n"
    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
    "\r\n"
    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
    "#ifdef _WIN32\r\n"
    "LANGUAGE 9, 1\r\n"
    "#pragma code_page(1252)\r\n"
    "#endif //_WIN32\r\n"
    "#include ""res\\IconMan.rc2""  // non-Microsoft Visual C++ edited resources\r\n"
    "#include ""afxres.rc""         // Standard components\r\n"
    "#endif\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,0
 PRODUCTVERSION 1,0,0,0
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x2L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "Comments", "Generated with NSELib AppWizard\0"
            VALUE "CompanyName", "\0"
            VALUE "FileDescription", "IconMan\0"
            VALUE "FileVersion", "1, 0, 0, 0\0"
            VALUE "InternalName", "IconMan\0"
            VALUE "LegalCopyright", "Copyright (C) 2002\0"
            VALUE "LegalTrademarks", "\0"
            VALUE "OriginalFilename", "IconMan.dll\0"
            VALUE "PrivateBuild", "\0"
            VALUE "ProductName", "IconMan\0"
            VALUE "ProductVersion", "1, 0, 0, 0\0"
            VALUE "SpecialBuild", "\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

#endif    // !_MAC


/////////////////////////////////////////////////////////////////////////////
//
// Icon
//

// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_FOLDER              ICON    DISCARDABLE     "res\\folder_shell32.ico"
IDI_FOLDER_OPEN         ICON    DISCARDABLE     "res\\folderop_shell32.ico"
#endif    // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif //_WIN32
#include "res\IconMan.rc2"  // non-Microsoft Visual C++ edited resources
#include "afxres.rc"         // Standard components
#endif

/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED

IconMan.def

This file is generated by the wizard.

; IconMan.def : Declares the module parameters for the DLL.

LIBRARY      "IconMan"
DESCRIPTION  'IconMan Windows Dynamic Link Library'

EXPORTS
    ; Explicit exports can go here
	DllCanUnloadNow     @1 PRIVATE
	DllGetClassObject   @2 PRIVATE
	DllRegisterServer   @3 PRIVATE
	DllUnregisterServer	@4 PRIVATE