【发布时间】:2012-07-19 06:24:44
【问题描述】:
我使用EnumDisplayDevices 获取有关当前会话中显示设备的信息。
但无论会话如何,我都需要有关显示设备的信息。因为我创建了一些 Windows 服务应用程序(系统进程)。
有人知道此代码的替代方法吗:
vncDesktop::GetNrMonitors()
{
if(OSversion()==3 || OSversion()==5) return 1;
int i;
int j=0;
helper::DynamicFn<pEnumDisplayDevices> pd("USER32","EnumDisplayDevicesA"); // it's EnumDisplayDevices function
if (pd.isValid())
{
DISPLAY_DEVICE dd;
ZeroMemory(&dd, sizeof(dd));
dd.cb = sizeof(dd);
for (i=0; (*pd)(NULL, i, &dd, 0); i++)
{
if (dd.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
if (!(dd.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER))j++;
}
}
return j;
}
提前致谢!
【问题讨论】:
-
我有点怀疑。服务为什么要关心?它没有做任何 UI,是吗?
-
我在 vnc 服务器上使用这个服务。
-
设置标志以允许桌面交互应该可以解决这个问题。
-
该标志最后一次起作用是在 10 年前,在 Windows XP 中。 Windows 服务不显示用户界面,也不允许以任何方式与用户交互。他们甚至无法假设用户会登录——服务一直在后台运行,甚至从登录屏幕开始。