void GetMediaExtension(vector<wstring>& vctExtensions, LPCWSTR lpVideoType)
{
HKEY hKey = NULL;
DWORD dwType = REG_SZ;
LONG retv = -1;
const WCHAR *pVideoType = (NULL == lpVideoType) ? KIND_VIDEO : lpVideoType;
const WCHAR *pRegPath =
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\KindMap";
retv = RegOpenKeyEx(HKEY_LOCAL_MACHINE, pRegPath, 0, KEY_READ, &hKey);
if (ERROR_SUCCESS == retv)
{
TCHAR achClass[MAX_PATH] = L"";
DWORD cchClassName = MAX_PATH;
DWORD cSubKeys = 0;
DWORD cbMaxSubKey = 0;
DWORD cchMaxClass = 0;
DWORD kNumber = 0;
DWORD cchMaxValue = 0;
DWORD cbMaxValueData = 0;
DWORD cbSecurityDescriptor = 0;
FILETIME ftLastWriteTime;
retv = RegQueryInfoKey(
hKey,
achClass,
&cchClassName,
NULL,
&cSubKeys,
&cbMaxSubKey,
&cchMaxClass,
&kNumber,
&cchMaxValue,
&cbMaxValueData,
&cbSecurityDescriptor,
&ftLastWriteTime);
if (ERROR_SUCCESS == retv)
{
TCHAR szValueName[MAX_PATH] = { 0 };
TCHAR szValueData[MAX_PATH] = { 0 };
DWORD dwcchValueName = MAX_PATH;
DWORD dwcchValueData = MAX_PATH;
for (int i = 0; i < (int)kNumber; ++i)
{
dwcchValueName = MAX_PATH;
ZeroMemory(szValueName, sizeof(TCHAR) * MAX_PATH);
retv = RegEnumValue(
hKey,
i,
szValueName,
&dwcchValueName,
NULL,
NULL,
NULL,
NULL);
if (ERROR_SUCCESS == retv)
{
dwType = REG_SZ;
dwcchValueData = MAX_PATH;
ZeroMemory(szValueData, sizeof(TCHAR) * MAX_PATH);
retv = RegQueryValueEx(
hKey,
szValueName,
NULL,
&dwType,
(PBYTE)szValueData,
&dwcchValueData);
if (ERROR_SUCCESS == retv)
{
if (0 == _wcsicmp(szValueData, pVideoType))
{
vctExtensions.push_back(wstring(szValueName));
}
}
}
}
}
}
if (NULL != hKey)
{
RegCloseKey(hKey);
}
}
用法如下:
vector<wstring> vctExts;
GetMediaExtension(vctExts, _T("video")); 或者
GetMediaExtension(vctExts, KIND_VIDEO);
// Possible discrete values for PKEY_Kind are:
#define KIND_CALENDAR L"calendar"
#define KIND_COMMUNICATION L"communication"
#define KIND_CONTACT L"contact"
#define KIND_DOCUMENT L"document"
#define KIND_EMAIL L"email"
#define KIND_FEED L"feed"
#define KIND_FOLDER L"folder"
#define KIND_GAME L"game"
#define KIND_INSTANTMESSAGE L"instantmessage"
#define KIND_JOURNAL L"journal"
#define KIND_LINK L"link"
#define KIND_MOVIE L"movie"
#define KIND_MUSIC L"music"
#define KIND_NOTE L"note"
#define KIND_PICTURE L"picture"
#define KIND_PROGRAM L"program"
#define KIND_RECORDEDTV L"recordedtv"
#define KIND_SEARCHFOLDER L"searchfolder"
#define KIND_TASK L"task"
#define KIND_VIDEO L"video"
#define KIND_WEBHISTORY L"webhistory"