2013-02-09 94 views
1

我都已經通過檢查值發現了一個監控設備名稱DEV_BROADCAST_DEVICEINTERFACE.dbcc_name,我嘗試使用該設備名稱的功能EnumDisplaySettings()內(該設備名稱爲第一個參數該功能)。非標準設備名稱使用EnumDisplaySettings

我的問題:函數EnumDisplaySettings()總是返回0,即失敗。我相信它失敗了,因爲MSDN說EnumDisplaySettings()的第一個參數應該是DISPLAY_DEVICE.DeviceName returned from EnumDisplayDevices,而我的設備名稱是從DEV_BROADCAST_DEVICEINTERFACE.dbcc_name

使用DEV_BROADCAST_DEVICEINTERFACE.dbcc_name我得到設備名稱\\?\DISPLAY#GSM3AD7#5&20a3f50d&0&UID513#{866519b5-3f07-4c97-b7df-24 c5d8a8ccb8}爲我的第二臺顯示器,而EnumDisplayDevices()給我設備名稱\\.\DISPLAYV1

是否可以使用EnumDisplaySettings()其中第一個參數是從函數DEV_BROADCAST_DEVICEINTERFACE.dbcc_name中檢索的設備名稱?

我問的原因是:當第二臺顯示器連接到電腦我想改變顯示器的顯示設置。但在監視器連接時,我會通過DEV_BROADCAST_DEVICEINTERFACE.dbcc_name通知其設備名稱,其中(如上所述)與EnumDisplayDevices()針對完全相同的設備返回的名稱不同。我不知道如何通過枚舉所有使用EnumDisplayDevices()的顯示設備來識別第二個顯示器?任何想法如何枚舉使用EnumDisplayDevices()的所有顯示設備,並確定剛連接到計算機的正確顯示器/設備?

回答

1

我不能保證它,但我會猜想只要保持連接狀態,顯示設備就保留其名稱。

根據這個假設,我會在程序啓動時運行EnumDisplayDevices。連接新監視器時,再次使用EnumDisplayDevices,並將設備列表與先前列表進行比較,然後將EnumDisplaySettings(無論哪個設備新添加到列表中)都進行比較。

完成此操作後,將舊列表替換爲新列表,然後準備下次用戶插入另一臺顯示器。