2014-09-04 93 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