ListControls.cpp
上传用户:bjlvip
上传日期:2010-02-08
资源大小:744k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // ListControls.cpp
  2. #define _WIN32_DCOM    // For CoInitializeEx
  3. #include <iostream.h>  // For cout
  4. #include <comcat.h>    // For component category stuff
  5. void main(int argc, char** argv)
  6. {
  7. cout << "Component: CoInitializeEx()" << endl;
  8. CoInitializeEx(NULL, COINIT_MULTITHREADED);
  9. // Instantiate COM's implementation of component categories
  10. // Ask for ICatInformation
  11. ICatInformation* pCatInformation;
  12. CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_INPROC_SERVER, IID_ICatInformation, (void**)&pCatInformation);
  13. // Get an enumerator for all CLSIDs that are Control objects
  14. IEnumCLSID* pEnumCLSID;
  15. pCatInformation->EnumClassesOfCategories(1, (CATID*)&CATID_Control, 0, NULL, &pEnumCLSID);
  16. // Release the ICatInformation interface pointer
  17. pCatInformation->Release();
  18. // Loop through the enumerator
  19. CLSID clsid = CLSID_NULL;
  20. DWORD fetched = 0;
  21. DWORD dwSize = 1024;
  22. char szName[1024];
  23. HKEY hKey = 0;
  24. char szKeyBuf[100];
  25. while(true)
  26. {
  27. // Get the next CLSID
  28. pEnumCLSID->Next(1, &clsid, &fetched);
  29. if(fetched == 0)
  30. break;
  31. // Convert the CLSID to a string for display
  32. char buffer[39];
  33. OLECHAR ppsz[39];
  34. StringFromGUID2(clsid, ppsz, 39);
  35. WideCharToMultiByte(CP_ACP, 0, ppsz, 39, buffer, 39, NULL, NULL);
  36. // Copy keyname into buffer.
  37. strcpy(szKeyBuf, "CLSID\");
  38. strcat(szKeyBuf, buffer);
  39.     HRESULT hr = RegOpenKeyEx(HKEY_CLASSES_ROOT, szKeyBuf, 0, KEY_READ, &hKey);
  40.     if(FAILED(hr))
  41. cout << "Couldn't open the CLSID key" << endl;
  42.     // Read the value from the registry
  43. hr = RegQueryValueEx(hKey, NULL, NULL, NULL, (unsigned char*)szName, &dwSize);
  44. if(FAILED(hr))
  45.     cout << "Couldn't read the registry value" << endl;
  46. cout << szName << ": " << szKeyBuf << endl;
  47. RegCloseKey(hKey);
  48. }
  49. // Release the enumerator
  50. pEnumCLSID->Release();
  51. CoUninitialize();
  52. }