C++でATLを使用してShellインスタンスのIShellDisp2::GetSystemInformationメソッドを操作するサンプルコードです。エラー処理などは簡略化しています。
// IShellDisp2::GetSystemInformationのATLサンプルコード #define STRICT #include <Windows.h> #include <TChar.h> #include <ShlDisp.h> #include <atlbase.h> #include <atlcom.h> #include <atlcomcli.h> using namespace::ATL; int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) { // COMの初期化 HRESULT hr = ::CoInitializeEx( nullptr, COINIT::COINIT_MULTITHREADED); if (FAILED(hr)) { return -1; } // CoInitializeEx/Uninitializeよりも先に解放されるスコープを定めます。 { // Shellインスタンスの作成 CComPtr<IShellDispatch2> pShellDisp; HRESULT hr = ::CoCreateInstance( CLSID_Shell, nullptr, CLSCTX_INPROC_SERVER, IID_IShellDispatch2, (LPVOID*)&pShellDisp); if (SUCCEEDED(hr)) { // TODO: ここにShellインスタンスが作成できた場合の処理を追加します。 // CComVariant vDirectoryServiceAvailable; hr = pShellDisp->GetSystemInformation( CComBSTR(L"DirectoryServiceAvailable"), &vDirectoryServiceAvailable); CComVariant vDoubleClickTime; hr = pShellDisp->GetSystemInformation( CComBSTR(L"DoubleClickTime"), &vDoubleClickTime); CComVariant vProcessorLevel; hr = pShellDisp->GetSystemInformation( CComBSTR(L"ProcessorLevel"), &vProcessorLevel); CComVariant vProcessorSpeed; hr = pShellDisp->GetSystemInformation( CComBSTR(L"ProcessorSpeed"), &vProcessorSpeed); CComVariant vProcessorArchitecture; hr = pShellDisp->GetSystemInformation( CComBSTR(L"ProcessorArchitecture"), &vProcessorArchitecture); CComVariant vPhysicalMemoryInstalled; hr = pShellDisp->GetSystemInformation( CComBSTR(L"PhysicalMemoryInstalled"), &vPhysicalMemoryInstalled); CComVariant vIsOS_DomainMember; hr = pShellDisp->GetSystemInformation( CComBSTR(L"IsOS_DomainMember"), &vIsOS_DomainMember); } } // COMの解放 ::CoUninitialize(); return 0; }