【问题标题】:How to know if a user associated with a process is active如何知道与进程关联的用户是否处于活动状态
【发布时间】: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进程。如果有多个用户登录,无论是通过快速用户切换、终端服务还是远程桌面连接,都可能同时运行多个最差/桌面。

标签: c++ windows qt winapi


【解决方案1】:

尝试使用WTSEnumerateSessionsEx。返回的结构包含有用的字段 StatepUserName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多