source: trunk/Utilities/EnumerateTreatAsClasses/EnumerateTreatAsClasses.cpp @ 937

Last change on this file since 937 was 163, checked in by roman, 9 years ago
File size: 2.3 KB
Line 
1////////////////////////////////////////////////////////////
2// Copyright (C) Roman Ryltsov, 2013
3// Created by Roman Ryltsov roman@alax.info
4//
5// A permission to use the source code is granted as long as reference to
6// source website http://alax.info is retained.
7
8#include "stdafx.h"
9
10VOID ProcessKey(LPCTSTR pszClassKeyName)
11{
12        _ATLTRY
13        {
14                CRegKey ClassKey;
15                __C(HRESULT_FROM_WIN32(ClassKey.Open(HKEY_CLASSES_ROOT, pszClassKeyName, KEY_READ)));
16                DWORD nIndex, nFoundCount = 0;
17                for(nIndex = 0; ; nIndex++)
18                {
19                        TCHAR pszName[1024] = { 0 };
20                        DWORD nNameLength = DIM(pszName);
21                        const HRESULT nResult = HRESULT_FROM_WIN32(ClassKey.EnumKey(nIndex, pszName, &nNameLength));
22                        if(FAILED(nResult))
23                        {
24                                _A(nResult == HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS));
25                                break; // Done
26                        }
27                        CRegKey TreatAsKey;
28                        if(FAILED(HRESULT_FROM_WIN32(TreatAsKey.Open(ClassKey, AtlFormatString(_T("%s\\TreatAs"), pszName), KEY_READ))))
29                                continue; // No TreatAs
30                        CString sClassIdentifier = pszName;
31                        CString sClassDescription = _RegKeyHelper::QueryStringValue((HKEY) ClassKey, pszName);
32                        CString sTreatAsKeyClassIdentifier = _RegKeyHelper::QueryStringValue(TreatAsKey);
33                        CString sTreatAsKeyClassDescription;
34                        CRegKey TreatAsClassKey;
35                        if(SUCCEEDED(HRESULT_FROM_WIN32(TreatAsClassKey.Open(HKEY_CLASSES_ROOT, AtlFormatString(_T("%s\\%s"), pszClassKeyName, sTreatAsKeyClassIdentifier), KEY_READ))))
36                                sTreatAsKeyClassDescription = _RegKeyHelper::QueryStringValue((HKEY) ClassKey, sTreatAsKeyClassIdentifier);
37                        _tprintf(_StringHelper::Join<CString>(4, _T("\t"), 
38                                sClassIdentifier,
39                                sClassDescription,
40                                sTreatAsKeyClassIdentifier,
41                                sTreatAsKeyClassDescription,
42                                0) + _T("\n"));
43                        nFoundCount++;
44                }
45                _tprintf(_T("Processed %d keys, %d TreatAs items found\n"), nIndex, nFoundCount);
46        }
47        _ATLCATCH(Exception)
48        {
49                _tprintf(_T("Exception: 0x%08x %s\n"), (HRESULT) Exception, AtlFormatSystemMessage(Exception).TrimRight(_T("\t\n\r .")));
50        }
51}
52int _tmain(int argc, _TCHAR* argv[])
53{
54        _tprintf(_T("Enumerating CLSID class identifiers...\n"));
55        ProcessKey(_T("CLSID"));
56        #if defined(_WIN64)
57                _tprintf(_T("Enumerating WOW64 CLSID class identifiers...\n"));
58                ProcessKey(_T("Wow6432Node\\CLSID"));
59        #endif // defined(_WIN64)
60        return 0;
61}
62
Note: See TracBrowser for help on using the repository browser.