獲得顯示器的相關信息

  1. /*
  2.     下面的例子說明了如何使用函數EnumDisplayDevice獲得顯示器的信息.
  3. */
  4. BOOL GetDisplayMonitorInfo(int nDeviceIndex, LPSTR lpszMonitorInfo)
  5. {
  6.     FARPROC EnumDisplayDevices;
  7.     HINSTANCE  hInstUser32;
  8.     DISPLAY_DEVICE DispDev; 
  9.     char szSaveDeviceName[33];  // 32 + 1 for the null-terminator
  10.     BOOL bRet = TRUE;
  11.     HRESULT hr;
  12.     hInstUser32 = LoadLibrary("c://windows/User32.DLL");
  13.     if (!hInstUser32) return FALSE;  
  14.     //獲取函數的入口地址
  15.     EnumDisplayDevices = (FARPROC)GetProcAddress(hInstUser32,"EnumDisplayDevicesA");
  16.     if (!EnumDisplayDevices)
  17.     {
  18.         FreeLibrary(hInstUser32);
  19.         return FALSE;
  20.     }
  21.     //通過宏來填充一個結構體
  22.     ZeroMemory(&DispDev, sizeof(DispDev));
  23.     DispDev.cb = sizeof(DispDev); 
  24.     // 首次調用EnumDisplayDevice之後,DispDev.DeviceString中保存的是適配器
  25.     //的名稱
  26.     if (EnumDisplayDevices(NULL, nDeviceIndex, &DispDev, 0)) 
  27.     {  
  28.         //字符串的複製,通過此函數的第二個參數設置要複製的數據的長度可以
  29.         //確保複製的過程數據不越界
  30.         hr = StringCchCopy(szSaveDeviceName, 33, DispDev.DeviceName);
  31.         //這裏用來檢查複製是否成功,檢查的方式是使用宏SUCCEED和FAILED
  32.         if (FAILED(hr))
  33.         {
  34.             /*
  35.             #define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
  36.             #define FAILED(Status) ((HRESULT)(Status)<0)
  37.             HRESULT其實就是LONG型,如此看來FAILED的意思就是其檢查的值小於0,
  38.             SUCCESSED的意思就是其檢查的值不小於0.
  39.             */
  40.             // TODO: write error handler
  41.         }
  42.         // 通過第二次調用EnumDisplayDevices,並且第一個參數設置成適配器的名稱,
  43.         //DispDev.DeviceString中保存的便是顯示器的名稱了. 
  44.         EnumDisplayDevices(szSaveDeviceName, 0, &DispDev, 0);   
  45.         //在下面的操作中,必須確保lpszMonitorInfo長度爲129個字節且以0結尾
  46.         hr = StringCchCopy(lpszMonitorInfo, 129, DispDev.DeviceString);
  47.         if (FAILED(hr))
  48.         {
  49.             // TODO: write error handler
  50.         }
  51.     } 
  52.     else
  53.     {
  54.         bRet = FALSE;
  55.     }
  56.     FreeLibrary(hInstUser32);
  57.     return bRet;
  58. }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章