2014-09-04 97 views
1

我有代碼作爲Windows服務運行,它想要確定直接連接的顯示器的分辨率。 (是的,我明白用戶可能通過RDP,VDI等與機器交互,所以這並不總是有意義的 - 但這只是一種優化,所以在常見的情況下,有一個它仍然是有用的。)Windows:作爲服務運行時查找屏幕分辨率

我想使用::GetSystemMetrics(SM_CXVIRTUALSCREEN),但它返回0,因爲我在會話0中運行。同樣EnumDisplayDevices看起來像它只會用於當前的交互會話。

我們希望能夠做到這一點,即使沒有用戶登錄。

有沒有辦法去探索硬件的屏幕分辨率,即使作爲一種服務?

回答

1

documentationEnumDisplayDevices()清清楚楚地寫着:

的EnumDisplayDevices功能,可以獲取有關當前會話顯示設備信息。

由於服務在會話0中運行,並且會話0中沒有顯示,因此沒有監視器信息可供枚舉。

嘗試使用EnumDisplayMonitors()代替。

+1

我還沒有嘗試過,但我懷疑'EnumDisplayMonitors()'遭受同樣的問題,如下所述:http://social.msdn.microsoft.com/Forums/vstudio/en-US/4384f8d2- c429-410b-87e4-1e031ddc8167/enumdisplaydevicesenumdisplaymonitorsgetsystemmetricssmcmonitors - 不 - 不工作從一個服務?論壇= vcgeneral。雖然謝謝! – 2014-09-05 13:32:10