1. 程式人生 > >多顯示器程式設計--獲取所有顯示器的解析度

多顯示器程式設計--獲取所有顯示器的解析度

最近需要在windows下進行多顯示器程式設計,問題是:怎麼樣獲取所有的顯示器的解析度(比如:有三個顯示器M1、M2、M3,如何分別取得它們三個的解析度) 下面是一些網友討論的記錄: Demo: http://download.csdn.net/detail/w_sx12553/5027326 關於如何獲得顯示器編號的討論: Windows系統從來不會給某一個顯示器分配一個編號!
你所看到編號,不過是系統在配置的時候,為了讓你分辨不同的顯示器而顯示的編號。

Windows系統中的顯示器始終又隱含一個編號!

在Windows系統中,通常一塊顯示卡可以包含多個:DISPLAY_DEVICE,每一個DISPLAY_DEVICE下面可以掛接一個Monitor。

我當時是這樣做的:列舉系統中的顯示卡,然後列舉下面的DISPLAY_DEVICE,對於每一個DISPLAY_DEVICE,檢查(可以通過EnumDisplaySettingsEx)是否掛接得有Monitor。如果有,就計數。
你所看到的編號就是這些Monitor被枚舉出來的順序。
上面的方法我是在Windows7與intel 核心顯示卡HD4000上測試過的。2個顯示器確實與Windows系統的編號一致。

個人猜測:事實上這個列舉過程所出現的結果,與系統無關,而是與顯示卡硬體、驅動有關。 Here's a list of API functions related to multiple monitors:

ChangeDisplaySettingsEx: changes display settings
EnumDisplayDevices: enumerates all displays, including disabled ones
EnumDisplayMonitors: enumerates all enabled displays
EnumDisplaySettingsEx: gets display settings
GetMonitorInfo: gets information about a monitor such as the working area
MonitorFromPoint: returns the monitor containing a given point
MonitorFromRect: returns the monitor containing a given rectangle
MonitorFromWindow: returns the monitor containing a given window
API functions specific to Windows 7:

QueryDisplayConfig: returns current display settings
SetDisplayConfig: sets current display settings
參考: http://bbs.csdn.net/topics/390683091 http://blog.csdn.net/jennyvenus/article/details/42027043 http://blog.csdn.net/freewave/article/details/2033877 http://www.kuqin.com/shuoit/20131124/336528.html http://blog.csdn.net/morewindows/article/details/8502583 http://my.oschina.net/u/1255773/blog/177533