2009-08-14 29 views

Trả lời

10

Trên Windows, bạn có thể sử dụng GetDeviceCaps với cờ BITSPIXEL nhưng trước tiên bạn sẽ cần màn hình DC (GetDC có thể tìm nạp bạn).

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

hoạt động hoàn hảo - cảm ơn rất nhiều! –

3

Bạn có thể làm điều đó bằng 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. 
+4

API như thế này làm cho tôi vui vẻ nhớ tại sao tôi chuyển sang phát triển NET :) –

+0

hehehehe ... nó không phải là một khổng lồ lượng truy cập WMI dễ dàng hơn từ tâm trí .NET;) – Goz

0

Gọi GetDeviceCaps() để lấy BITSPIXEL

Nó không phải là một "mỗi máy" bất động sản thực sự, bạn cần một HDC.

3

Bạn sẽ có thể để có được các bit mỗi giá trị pixel sử dụng

HDC hdc = GetDC(NULL); 
int colour_depth = GetDeviceCaps(hdc,BITSPIXEL); 
ReleaseDC(NULL,hdc); 
Các vấn đề liên quan