2009-08-14 5 views

Antwort

10

Unter Windows könnten Sie GetDeviceCaps mit dem BITSPIXEL Flag verwenden, aber Sie benötigen einen Bildschirm DC zuerst (GetDC könnte Sie holen).

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

funktioniert perfekt - vielen Dank! –

3

Sie können es mit WMI tun.

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. 
+4

APIs wie diese machen mir Freude daran erinnern, warum ich zu .NET Entwicklung :) –

+0

geschaltet Lage sein, hehehehe ... Es ist nicht eine große viel einfacher Zugriff auf WMI von .NET mind;) – Goz

0

Anruf GetDeviceCaps() abrufen BITSPIXEL

Es ist nicht ein "pro-Maschine" Eigenschaft tatsächlich Sie eine HDC benötigen.

3

Sie sollten die Bits pro Pixelwert unter Verwendung

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