2011-01-28 86 views
2

EnumDisplayMonitors列出當前激活的所有顯示器。但是,它似乎並沒有返回禁用的功能(即「將我的桌面擴展到此監視器上」的功能取消選中)。我如何獲得包括那些殘疾人的人數?windows:獲取顯示器數量,包括禁用顯示器數量

+0

你必須直接與視頻驅動程序交談。 IOCTL_VIDEO_ENUM_MONITOR_PDO,我想。記錄很差。 – 2011-01-28 18:41:19

回答

1

好了,首先你要創建一個設備上下文:

http://msdn.microsoft.com/en-us/library/dd183490(v=VS.85).aspx下面的代碼會給你所有的顯示器:

CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL) 

然後你會召喚DeviceContext的EnumDisplayDevices這將有一個指針轉換爲DISPLAY_DEVICE結構,其中包含有關顯示設備的設置的信息。 http://msdn.microsoft.com/en-us/library/dd162609(v=VS.85).aspx

每MSDN:

要查詢所有顯示設備在當前會話中,調用這個函數在一個循環中,從iDevNum設置爲0,並增加iDevNum直至功能失效。要選擇桌面中的所有顯示設備,請僅使用DISPLAY_DEVICE結構中具有DISPLAY_DEVICE_ATTACHED_TO_DESKTOP標誌的顯示設備。

要獲取有關顯示適配器的信息,請將lpDevice設置爲NULL的方式調用EnumDisplayDevices。例如,DISPLAY_DEVICE.DeviceString包含適配器名稱。

要獲得顯示監視器上的信息,首先調用EnumDisplayDevices並將lpDevice設置爲NULL。然後調用EnumDisplayDevices,將lpDevice從第一次調用EnumDisplayDevices設置爲DISPLAY_DEVICE.DeviceName,並將iDevNum設置爲零。然後DISPLAY_DEVICE.DeviceString是監視器名稱。

要查詢與適配器關聯的所有監視設備,請在lpDevice設置爲適配器名稱的情況下調用EnumDisplayDevices,將iDevNum設置爲從0開始,並將iDevNum設置爲遞增,直到函數失敗。請注意DISPLAY_DEVICE.DeviceName隨監視器信息的每次調用而變化,因此您必須保存適配器名稱。當適配器沒有更多監視器時,該功能失敗。

我不是C++程序員,但是我不得不在一天中編寫一些顯示方式的東西,而我只是試圖幫助我記憶中的那一點。 WINAPI上我有點生疏。

+0

如果他們幫助您解決您的問題,請將我的帖子標記爲「已回覆」! :) 謝謝! – bleepzter 2011-01-28 18:42:21

-1

你檢查了顯示器的顯示功能嗎?

我很確定MONITORINFO結構的MONITORINFOF_PRIMARY標誌指定哪個監視器是主監視器。任何具有MONITORINFO或MONITORINFOEX結構的監視器都是「有用的」監視器。

http://msdn.microsoft.com/en-us/library/dd145065(v=VS.85).aspx

至於顯示器也可這是什麼鏈接,您可以檢查這些:
獲取監控信息:http://msdn.microsoft.com/en-us/library/dd144942(v=VS.85).aspx
枚舉顯示設備:http://msdn.microsoft.com/en-us/library/dd162609(VS.85).aspx
顯示設備結構:http://msdn.microsoft.com/en-us/library/dd183569(v=VS.85).aspx

顯示設備結構有一個「DISPLAY_DEVICE_ACTIVE」標誌,表示設備是否處於活動狀態。

+0

看起來你不能在EnumDisplayMonitors中包含禁用的監視器,所以我在閱讀這個答案之後仍然不確定,你如何獲得包含顯示項目的列表,以及如何檢查返回的結構,活動標誌。我猜你在說EnumDisplayDevices應該包含非活動設備? – 2011-01-28 18:24:54