如何從DirectX診斷工具對話方塊中擷取資訊

來源:互聯網
上載者:User

  最近再搞一些煩人的東西,基本上就是要擷取如同DirectX診斷工具對話方塊中類似的資料。在這這裡,拚命在網上找了,一般像我們不熟悉這方面的時候,都是這樣過來的。找找了一堆亂七八糟的資訊。比如要擷取系統資訊,可以使用GetVerionEx,擷取記憶體資訊可以使用GetGlobalMemStatus等函數,還有像顯卡的東西,可以使用WMI來得到,等等這些個東西。每種小東西,都可以用不同的方式來擷取。但是dxdiag中的這些資料都有了,我們不妨直接擷取這些,免得使用那麼多各種方法來擷取不同的資訊。

     使用dxdiag得到資料,對於使用過directx開發的遊戲的人,應該對這個比較資料了。我是不懂了。dxdiag已經向我們暴露了一個com介面了,直接用就行了。具體就看dx sdk 協助文檔吧。使用com的東西,一般都是先初始化,然後得到想要的介面,查詢,最後記得卸載。在程式中如果初始化多次com話,會得到資料失敗,所以只能一次初始化com。

     在這裡給出一個擷取硬體加速資訊的代碼。要擷取其他的資料,其實是類似的。

HRESULTGetDirectFunViaDxDiag(bool* bDirectDraw,bool* bDirect3D,bool* bAGP)<br />{<br />HRESULT hr;<br />bool bCleanupCOM = false; </p><p>bool bSuccessGettingMajor = false;<br />bool bSuccessGettingMinor = false;<br />bool bSuccessGettingLetter = false; </p><p>if(!bDirectDraw || !bDirect3D || !bAGP)<br />{<br />return E_FAIL;<br />}</p><p>// Init COM. COM may fail if its already been inited with a different<br />// concurrency model. And if it fails you shouldn't release it.<br />hr = CoInitialize(NULL);<br />bCleanupCOM = SUCCEEDED(hr); </p><p>// Get an IDxDiagProvider<br />bool bGotDirectXVersion = false;<br />IDxDiagProvider* pDxDiagProvider = NULL;<br />hr = CoCreateInstance(CLSID_DxDiagProvider,<br />NULL,<br />CLSCTX_INPROC_SERVER,<br />IID_IDxDiagProvider,<br />(LPVOID*)&pDxDiagProvider);<br />if( SUCCEEDED(hr))<br />{<br />// Fill out a DXDIAG_INIT_PARAMS struct<br />DXDIAG_INIT_PARAMS dxDiagInitParam;<br />ZeroMemory( &dxDiagInitParam, sizeof(DXDIAG_INIT_PARAMS));<br />dxDiagInitParam.dwSize = sizeof(DXDIAG_INIT_PARAMS);<br />dxDiagInitParam.dwDxDiagHeaderVersion = DXDIAG_DX9_SDK_VERSION;<br />dxDiagInitParam.bAllowWHQLChecks = false;<br />dxDiagInitParam.pReserved = NULL; </p><p>// Init the m_pDxDiagProvider<br />hr = pDxDiagProvider->Initialize(&dxDiagInitParam);<br />if(SUCCEEDED(hr))<br />{<br />IDxDiagContainer* pDxDiagRoot = NULL;<br />IDxDiagContainer* pDxDiagSystemInfo = NULL;<br />IDxDiagContainer*pDxDiagDispaly = NULL;</p><p>// Get the DxDiag root container<br />hr = pDxDiagProvider->GetRootContainer( &pDxDiagRoot);<br />if(SUCCEEDED(hr))<br />{ </p><p>hr = pDxDiagRoot->GetChildContainer(L"DxDiag_DisplayDevices.0",&pDxDiagDispaly);</p><p>if (SUCCEEDED(hr))<br />{<br />VARIANT var;<br />VariantInit( &var);<br />bool bDDAccelerationEnabled,<br />b3DAccelerationExists,<br />b3DAccelerationEnabled,<br />bAGPEnabled,<br />bAGPExists,<br />bAGPExistenceValid;</p><p>hr = pDxDiagDispaly->GetProp(L"bDDAccelerationEnabled",&var);<br />if(SUCCEEDED(hr) && var.vt == VT_BOOL)<br />{<br />*bDirectDraw = bDDAccelerationEnabled = var.boolVal;<br />} </p><p>VariantClear( &var );</p><p>// hr = pDxDiagDispaly->GetProp(L"b3DAccelerationExists",&var);<br />// if(SUCCEEDED(hr) && var.vt == VT_BOOL)<br />// {<br />// b3DAccelerationExists = var.boolVal;<br />// }<br />//<br />// VariantClear(&var);</p><p>hr = pDxDiagDispaly->GetProp(L"b3DAccelerationEnabled",&var);<br />if(SUCCEEDED(hr) && var.vt == VT_BOOL)<br />{<br />*bDirect3D = b3DAccelerationEnabled = var.boolVal;<br />} </p><p>VariantClear( &var );</p><p>hr = pDxDiagDispaly->GetProp(L"bAGPEnabled",&var);<br />if(SUCCEEDED(hr) && var.vt == VT_BOOL)<br />{<br />*bAGP = bAGPEnabled = var.boolVal;<br />} </p><p>VariantClear(&var);</p><p>// hr = pDxDiagDispaly->GetProp(L"bAGPExists",&var);<br />// if(SUCCEEDED(hr) && var.vt == VT_BOOL)<br />// {<br />// bAGPExists = var.boolVal;<br />// }<br />//<br />// VariantClear( &var );<br />//<br />// hr = pDxDiagDispaly->GetProp(L"bAGPExistenceValid",&var);<br />// if(SUCCEEDED(hr) && var.vt == VT_BOOL)<br />// {<br />// bAGPExistenceValid = var.boolVal;<br />// }<br />//<br />// VariantClear(&var);</p><p>}</p><p>pDxDiagRoot->Release();<br />}<br />} </p><p>pDxDiagProvider->Release();<br />} </p><p>if(bCleanupCOM)<br />CoUninitialize(); </p><p>if( bGotDirectXVersion)<br />return S_OK;<br />else<br />return E_FAIL; </p><p>return E_FAIL;<br />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.