1. 程式人生 > >顯示器物理尺寸的獲取,EDID資料獲取【點評:很好的程式碼】

顯示器物理尺寸的獲取,EDID資料獲取【點評:很好的程式碼】

原文http://blog.csdn.net/werocpp/article/details/50557048 網上查閱資料整理如下: 原理:由EnumDisplayDevices獲取當前顯示器的DISPLAY_DEVICE資料,取其中的DeviceID進行解析,獲取Model和Driver,然後在登錄檔SYSTEM\\CurrentControlSet\\Enum\\DISPLAY\\中匹配到鍵值,取得其中的EDID資料。 標頭檔案如下:
  1. /******************************************************************** 
  2.     created:    2016/01/21 
  3.     created:    21:1:2016   15:27 
  4.     file base:  XDisplayDevice 
  5.     file ext:   h 
  6.     author:     zhangweifang 
  7.     purpose:    顯示裝置相關API 
  8. *********************************************************************/
  9. #ifndef _X_DISPLAY_DEVICE_H_
  10. #define _X_DISPLAY_DEVICE_H_
  11. //////////////////////////////////////////////////////////////////////////
  12. #include <Windows.h>
  13. #include <string>
  14. usingnamespace std;  
  15. //////////////////////////////////////////////////////////////////////////
  16. // 獲取當前正在使用的Monitor
  17. BOOL
  18. XDD_GetActiveAttachedMonitor(  
  19.     OUT DISPLAY_DEVICE &ddMonitor                // 輸出ddMonitor資訊
  20.     );  
  21. // 解析DeviceID得到LEN0028以及{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
  22. // DeviceID:MONITOR\LEN0028\{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
  23. BOOL
  24. XDD_GetModelDriverFromDeviceID(  
  25.     IN  LPCWSTR lpDeviceID,                      // DeviceID
  26.     OUT wstring &strModel,                       // 輸出型號,比如LEN0028
  27.     OUT wstring &strDriver                       // 輸出驅動資訊,比如{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
  28.     );  
  29. // 根據Model判斷EDID資料是否正確
  30. BOOL
  31. XDD_IsCorrectEDID(  
  32.     IN  constBYTE *pEDIDBuf,                    // EDID資料緩衝區
  33.     IN  DWORD dwcbBufSize,                       // 資料位元組大小
  34.     IN  LPCWSTR lpModel                          // 型號
  35.     );  
  36. // 根據Model及Driver資訊取得EDID資料
  37. BOOL
  38. XDD_GetDeviceEDID(  
  39.     IN  LPCWSTR lpModel,                         // 型號
  40.     IN  LPCWSTR lpDriver,                        // Driver
  41.     OUT BYTE *pDataBuf,                          // 輸出EDID資料緩衝區
  42.     IN DWORD dwcbBufSize,                        // 輸出緩衝區位元組大小,不可小於256
  43.     OUT DWORD *pdwGetBytes = NULL                // 實際獲得位元組數
  44.     );  
  45. // 獲取當前Monitor的物理尺寸,單位CM
  46. BOOL
  47. XDD_GetActiveMonitorPhysicalSize(  
  48.     OUT DWORD &dwWidth,                          // 輸出寬度,單位CM
  49.     OUT DWORD &dwHeight                          // 輸出高度,單位CM
  50.     );  
  51. //////////////////////////////////////////////////////////////////////////
  52. #endif
原始檔如下:
  1. /******************************************************************** 
  2.     created:    2016/01/21 
  3.     created:    21:1:2016   15:27 
  4.     file base:  XDisplayDevice 
  5.     file ext:   h 
  6.     author:     zhangweifang 
  7.     purpose:    顯示裝置相關API 
  8. *********************************************************************/
  9. #include "XDisplayDevice.h"
  10. #include <tchar.h>
  11. //////////////////////////////////////////////////////////////////////////
  12. // 獲取當前正在使用的Monitor
  13. BOOL
  14. XDD_GetActiveAttachedMonitor(  
  15.     OUT DISPLAY_DEVICE &ddMonitor                // 輸出ddMonitor資訊
  16.     )  
  17. {  
  18.     // 初始化輸出引數
  19.     ZeroMemory(&ddMonitor, sizeof(ddMonitor));  
  20.     // 列舉Adapter下Monitor用變數
  21.     DWORD dwMonitorIndex = 0;  
  22.     DISPLAY_DEVICE ddMonTmp;  
  23.     // 列舉Adapter
  24.     DWORD dwAdapterIndex = 0;  
  25.     DISPLAY_DEVICE ddAdapter;  
  26.     ddAdapter.cb = sizeof(ddAdapter);     
  27.     while (::EnumDisplayDevices(0, dwAdapterIndex, &ddAdapter, 0) != FALSE)  
  28.     {  
  29.         // 列舉該Adapter下的Monitor
  30.         dwMonitorIndex = 0;  
  31.         ZeroMemory(&ddMonTmp, sizeof(ddMonTmp));  
  32.         ddMonTmp.cb = sizeof(ddMonTmp);       
  33.         while (::EnumDisplayDevices(ddAdapter.DeviceName, dwMonitorIndex, &ddMonTmp, 0) != FALSE)  
  34.         {  
  35.             // 判斷狀態是否正確
  36.             if (   (ddMonTmp.StateFlags & DISPLAY_DEVICE_ACTIVE) == DISPLAY_DEVICE_ACTIVE  
  37.                 && (ddMonTmp.StateFlags & DISPLAY_DEVICE_ATTACHED) == DISPLAY_DEVICE_ATTACHED  
  38.                 )  
  39.             {  
  40.                 ddMonitor = ddMonTmp;  
  41.                 return TRUE;  
  42.             }  
  43.             // 下一個Monitor
  44.             dwMonitorIndex += 1;  
  45.             ZeroMemory(&ddMonTmp, sizeof(ddMonTmp));  
  46.             ddMonTmp.cb = sizeof(ddMonTmp);  
  47.         }  
  48.         // 下一個Adapter
  49.         dwAdapterIndex += 1;  
  50.         ZeroMemory(&ddAdapter, sizeof(ddAdapter));  
  51.         ddAdapter.cb = sizeof(ddAdapter);  
  52.     }  
  53.     // 未列舉到滿足條件的Monitor
  54.     return FALSE;  
  55. }  
  56. // 解析DeviceID得到LEN0028以及{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
  57. // DeviceID:MONITOR\LEN0028\{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
  58. BOOL
  59. XDD_GetModelDriverFromDeviceID(  
  60.     IN  LPCWSTR lpDeviceID,                      // DeviceID
  61.     OUT wstring &strModel,                       // 輸出型號,比如LEN0028
  62.     OUT wstring &strDriver                       // 輸出驅動資訊,比如{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
  63.     )  
  64. {  
  65.     // 初始化輸出引數
  66.     strModel = L

    相關推薦

    顯示器物理尺寸獲取EDID資料獲取點評程式碼

    原文http://blog.csdn.net/werocpp/article/details/50557048 網上查閱資料整理如下: 原理:由EnumDisplayDevices獲取當前顯示器的DISPLAY_DEVICE資料,取其中的DeviceID進

    jquery的DOM節點獲取節點內容獲取和設定樣式寫入

    1.eq(index) eq是獲取DOM元素的方式之一,它的引數是一個數字,可以是任意整數,第一個元素從0開始,如果index為負數,則從-1算起,-1是最後一個DOM元素,如: <a>xxx</a> <a>yyy</a> &

    針對學習技術的過程有一篇文章寫的

    什麽 鏈接 方法 面向 bsp 獲得 甜美 promise 有效 摘自:https://www.zhihu.com/question/29138020/answer/72193349 很多“大牛”都會告誡初學者,用這個用那個,少走彎路,這樣反而把初學者推向了真正的彎路。

    碼農1天只能保證專心工作5小時對得起薪水麼?網友牛了!

    其中有相當一部分程式設計師,都會抱怨工作時間太長,沒有自己的生活,但是從來沒見過有人對這個事情認真的分析過,大家有沒有想過,工作一天中,真正的工作時間又是多少呢?對於一些人,可能9點開始上班,到公司後,開電腦,洗杯子,上廁所,然後喝杯熱水,接下來會刷一些新聞什麼的,到工作狀態了可能就已經10點鐘,然

    資料結構鏈式前向星

    第一次接觸鏈式前向星是在學習圖論的迪傑斯特拉演算法時,大佬們紛紛用鏈式前向星+堆優化+迪傑斯特拉解題,秀的我萌新懵的一批,當時不知道啥是鏈式前向星,不過隨著越來越深入,這種結構見得越來越多,慢慢的就明白了。 在儲存一個圖時,我們經常用的應該是矩陣,不過他比較浪費空間,尤其是稀疏圖,點又多,空間經

    2017浙工大院賽預賽 D 簡單的資料結構雙端佇列||陣列模擬

    時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 131072K,其他語言262144K 64bit IO Format: %lld 題目描述 慄醬有一天在網上衝浪的時候發現了一道

    說說售前關於售前售前軟體工程師----寫的

    說說售前(一):售前的作用 在ITPUB上有個哥們問做售前最需要什麼,大多數答:“忽悠”。應該說,很有意思的印象詞。濃縮的是精華,細想一下,如果用兩個字給售前定性的話,還真找不出另外的更合適的詞。但“忽悠”本身就是一種能力,常聽到人說某人太能忽悠了,到底怎麼樣才算是能忽悠呢

    AndroidToastandroid studio提供的一種的提醒方式

    Toast:android studio提供的一種非常好的提醒方式,即提示資訊,以短小資訊的形式通知給使用者,在一段時間之後會自動消失。 下面我們通過一個示例進行解釋它的用法 示例:設定一個按鈕,點選按鈕的時候顯示提示資訊。 步驟: 第一步:在layout的檔案中加入

    遊戲資料統計2ID村裡最強個人高速道具賽統計圖表

    首先非常佩服ID村裡最強,把2017年每一天玩的遊戲的戰績都統計了出來。這是一件非常需要毅力和堅持的事情。戰績統計在TXT文件。 可以看到,TXT文字非常多。如果想把一個個的TXT文字分別匯入到EXCEL裡做統計,還是很繁瑣的。所以這裡先把所有的TXT文字

    Oracle中獲取Date型別資料沒有時分秒

    oralce資料庫中,獲取Date型別資料,發現數據的格式為:“yyyy-mm-dd”,而不是“yyyy-mm-dd hh24:mi:ss” 1,使用JDBC從oracle資料庫中取Date型別資料,當使用getDate(“欄位名”)方法取值時,只能獲取到日期,而無法獲

    教師結構化面試一鍵獲取資料

    教師結構化面試,一個程式設計師男朋友,為愛而碼 【需求】   1、教 結構化面試資料太少,而且最好列印   2、資料儲存word檔案,方便共享 作為一名程式設計師,開始coding... 把如下程式碼儲存為download.py,雙擊執行,結果如下:

    用python批量獲取某路徑資料夾及子資料夾下的指定型別檔案並按原資料夾結構批量儲存處理後的檔案

    因為是把自己成功執行的整個程式碼按幾部分截取出來的,所以每一小節程式碼不一定能單獨執行,特此說明。 1.獲取某路徑資料夾及子資料夾下的指定pcm型別檔案的全部路徑 import os def eachfile(filepath):     pathdi

    Json返回查詢的資料前臺ajax獲取

    後臺程式碼: [WebMethod] public string GetCusCode() { DataTable dt = C_c.SelectT("select CusCode from Customer"); string jsonResul

    前端使用JSP來進行開發用AJAX獲取資料控制返回給前端返回的是JSP頁面還是JSON資料

    一,問題 以前開發的時候,前端使用JSP或許Thyme Leaf來開發。由於是使用AJAX來獲取資料,所以有時會犯糊塗,如何控制給前端返回頁面,還是一個JSON格式的資料。 二,解決方案 2.1 當你需要給前端返回JSON資料時 方案就是:在

    一般處理程式獲取getpost資料

      ashx具體程式碼: public class GuanWangWC : IHttpHandler { public void ProcessRequest(HttpContext context) {

    ajax post data 獲取不到資料注意 content-type的設定 、post/get(轉)

    ajax post  data  獲取不到資料,注意 content-type的設定 、post/get 關於 jQuery data 傳遞資料。網上各種獲取不到資料,亂碼之類的。 好吧今天我也遇到了,網上一查各種糾結。亂碼不管先看獲取不到資料。 因為之前一直用jQuery ajax

    利用C++獲取某一資料夾下的所有檔名獲取不帶字尾的檔名字

    來源:https://www.cnblogs.com/fnlingnzb-learner/p/6424563.html 那麼到底如何查詢檔案呢?我們需要一個結構體和幾個大家可能不太熟悉的函式。這些函式和結構體在<io.h>的標頭檔案中, 結構體為struct _finddata_t

    JSONP 跨域Ajax請求利用js對獲取到的資料進行處理.

    先看看獲取到的資料: 前端內容ajax 使用jsonp跨域請求方式,理解如下: JSONP本質: 利用script標籤src跨域訪問,獲得一個回撥函式,再利用回撥函式引數內容獲取返回的資料args img src   亦可以, Form src會被本地同源策略阻

    C# 不用遞迴獲取無限層級資料

    物件屬性 public class ResList { public int ID { get; set; } public List<ResList> Child { get; set; } = null; public int

    用nodejs搭建一個本地伺服器以供本地介面獲取服務端資料

    1、首先下載安裝好nodejs 64位的nodejs5.6.0下載地址:  5.6.0 nodejs,根據提示安裝在自己的電腦上即可 2、安裝好了,開啟cmd視窗,輸入命令:npm -v 檢驗nodejs是否安裝成功,如果出現以下介面則說明安裝成功了 3、輸入命令