WindowsXP-SP1/shell/lib/typelist.cpp

48 lines
1.3 KiB
C++

#include "stock.h"
#pragma hdrstop
STDAPI_(BOOL) IsTypeInList(LPCTSTR pszType, const LPCTSTR *arszList, UINT cList)
{
BOOL fRet = FALSE;
if (pszType && *pszType)
{
PCWSTR pszExt = NULL;
PCWSTR pszProgID = NULL;
if (*pszType == L'.')
pszExt = pszType;
else
pszProgID = pszType;
WCHAR szProgID[MAX_PATH];
DWORD cb = sizeof(szProgID);
if (!pszProgID)
{
ASSERT(pszExt);
if (ERROR_SUCCESS == SHGetValue(HKEY_CLASSES_ROOT, pszExt, NULL, NULL, szProgID, &cb))
pszProgID = szProgID;
else
pszProgID = NULL;
}
for (UINT n = 0; FALSE == fRet && n < cList; n++)
{
// check extension if available
if (pszExt)
{
fRet = (0 == StrCmpI(pszExt, arszList[n]));
}
if (!fRet && pszProgID)
{
WCHAR szTempID[MAX_PATH];
ULONG cb = sizeof(szTempID);
if (ERROR_SUCCESS == SHGetValue(HKEY_CLASSES_ROOT, arszList[n], NULL, NULL, szTempID, &cb))
{
fRet = 0 == StrCmpIW(pszProgID, szTempID);
}
}
}
}
return fRet;
}