如何找出运行vista / w7的机器的当前颜色深度?

我想检查操作系统的当前颜色深度来警告用户,如果他们尝试以“错误的”颜色深度运行我的应用程序(使用c + +&Qt)。

我想有一个赢得api电话来获取这些信息,但我找不到任何东西。

在Windows上,您可以使用带有BITSPIXEL标志的GetDeviceCaps ,但是首先需要一个屏幕DC( GetDC可以获取一个)。

 HDC dc = GetDC(NULL); int bitsPerPixel = GetDeviceCaps(dc, BITSPIXEL); ReleaseDC(NULL, dc); 

你可以使用WMI来做到这一点。

 int bitDepth = -1; hr = CoInitializeEx( NULL, COINIT_MULTITHREADED ); if ( SUCCEEDED( hr ) ) { // hr = CoInitializeSecurity( NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL ); if ( SUCCEEDED( hr ) ) { IWbemLocator* pLoc = NULL; hr = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (void**)&pLoc ); if ( SUCCEEDED( hr ) ) { IWbemServices* pSvc = NULL; hr = pLoc->Connectserver( BSTR( L"ROOT\\CIMV2" ), NULL, NULL, 0, NULL, 0, 0, &pSvc ); if ( SUCCEEDED( hr ) ) { hr = CoSetProxyBlanket( pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE ); if ( SUCCEEDED( hr ) ) { IEnumWbemClassObject* pEnumerator = NULL; hr = pSvc->ExecQuery( L"WQL", L"SELECT * FROM Win32_DisplayConfiguration", WBEM_FLAG_FORWARD_ONLY/* | WBEM_FLAG_RETURN_IMMEDIATELY*/, NULL, &pEnumerator ); if ( SUCCEEDED( hr ) ) { IWbemClassObject* pDisplayObject = NULL; ULONG numReturned = 0; hr = pEnumerator->Next( WBEM_INFINITE, 1, &pDisplayObject, &numReturned ); if ( numReturned != 0 ) { VARIANT vtProp; pDisplayObject->Get( L"BitsPerPel", 0, &vtProp, 0, 0 ); bitDepth = vtProp.uintVal; } } pEnumerator->Release(); } } pSvc->Release(); } pLoc->Release(); } } // bitDepth wshould now contain the bitDepth or -1 if it failed for some reason. 

你应该能够使用每像素值的位数

 HDC hdc = GetDC(NULL); int colour_depth = GetDeviceCaps(hdc,BITSPIXEL); ReleaseDC(NULL,hdc); 

调用GetDeviceCaps()来检索BITSPIXEL

这实际上不是一个“每机器”属性,你需要一个HDC。