- /*
- 下面的例子說明了如何使用函數EnumDisplayDevice獲得顯示器的信息.
- */
- BOOL GetDisplayMonitorInfo(int nDeviceIndex, LPSTR lpszMonitorInfo)
- {
- FARPROC EnumDisplayDevices;
- HINSTANCE hInstUser32;
- DISPLAY_DEVICE DispDev;
- char szSaveDeviceName[33]; // 32 + 1 for the null-terminator
- BOOL bRet = TRUE;
- HRESULT hr;
- hInstUser32 = LoadLibrary("c://windows/User32.DLL");
- if (!hInstUser32) return FALSE;
- //獲取函數的入口地址
- EnumDisplayDevices = (FARPROC)GetProcAddress(hInstUser32,"EnumDisplayDevicesA");
- if (!EnumDisplayDevices)
- {
- FreeLibrary(hInstUser32);
- return FALSE;
- }
- //通過宏來填充一個結構體
- ZeroMemory(&DispDev, sizeof(DispDev));
- DispDev.cb = sizeof(DispDev);
- // 首次調用EnumDisplayDevice之後,DispDev.DeviceString中保存的是適配器
- //的名稱
- if (EnumDisplayDevices(NULL, nDeviceIndex, &DispDev, 0))
- {
- //字符串的複製,通過此函數的第二個參數設置要複製的數據的長度可以
- //確保複製的過程數據不越界
- hr = StringCchCopy(szSaveDeviceName, 33, DispDev.DeviceName);
- //這裏用來檢查複製是否成功,檢查的方式是使用宏SUCCEED和FAILED
- if (FAILED(hr))
- {
- /*
- #define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
- #define FAILED(Status) ((HRESULT)(Status)<0)
- HRESULT其實就是LONG型,如此看來FAILED的意思就是其檢查的值小於0,
- SUCCESSED的意思就是其檢查的值不小於0.
- */
- // TODO: write error handler
- }
- // 通過第二次調用EnumDisplayDevices,並且第一個參數設置成適配器的名稱,
- //DispDev.DeviceString中保存的便是顯示器的名稱了.
- EnumDisplayDevices(szSaveDeviceName, 0, &DispDev, 0);
- //在下面的操作中,必須確保lpszMonitorInfo長度爲129個字節且以0結尾
- hr = StringCchCopy(lpszMonitorInfo, 129, DispDev.DeviceString);
- if (FAILED(hr))
- {
- // TODO: write error handler
- }
- }
- else
- {
- bRet = FALSE;
- }
- FreeLibrary(hInstUser32);
- return bRet;
- }
獲得顯示器的相關信息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.