【发布时间】:2014-11-19 14:58:43
【问题描述】:
我使用GetPixel 来获取Program Manager(桌面)某些点的颜色,但是如果系统切换到另一个用户,GetPixel 总是返回white。
所以我需要知道用户是活跃还是系统切换到另一个用户。
解决方案应该适用于操作系统:Windows XP 直到 Windows 8。
这就是我的工作:
HWND ProgmanHwnd = FindWindow(L"Progman", L"Program Manager");
if (!ProgmanHwnd) return;
HDC hDC = GetWindowDC(ProgmanHwnd);
if (!hDC) return;
COLORREF color = GetPixel(hDC, 10, 10); // it's always white when a used is logged off
【问题讨论】:
-
因此,与其说“用户是否登录”,不如说是“该进程的桌面(或 Window Station,我从不明白这个主题的内容)是否可见”?
-
@Medinoc 可能,是的,但
IsWindowVisible总是为项目经理返回true。 -
我认为
IsWindowVisible表示窗口是否在其桌面上可见,但完全独立于桌面本身是否可见。 -
@Medinoc 但
Program manager是桌面。它显示墙纸。你知道有什么方法可以知道桌面是可见的吗?当用户登录时它总是可见的。这就是为什么我的问题是关于它的。 -
@Ezee:程序管理器是一个运行在特定交互式工作站的
WinSta0\Desktop桌面上的shell进程。如果有多个用户登录,无论是通过快速用户切换、终端服务还是远程桌面连接,都可能同时运行多个最差/桌面。