【问题标题】:How to access windows in another session [duplicate]如何在另一个会话中访问窗口 [重复]
【发布时间】:2015-06-19 08:21:18
【问题描述】:

我正在开发一个应用程序来观察其他应用程序(包括其他用户会话的应用程序) 我的应用程序应该收集有关每个应用程序的 CPU 负载、内存使用情况和主窗口状态(如果存在)的信息。 现在我正在尝试获取其他应用程序的窗口状态。如果它的窗口与我的应用程序在同一个会话中,那么一切正常。

而且...我在另一个会话中获取有关窗口的信息时遇到问题。我已经阅读了这个旧主题:How can I enumerate the open windows (~EnumWindows) of another user session,并且我知道我应该在每个会话中启动新进程,以便枚举该会话桌面中的窗口。

但也许在 Windows Server 2012 中出现了针对此问题的新解决方案(一些新的 API 函数或在另一个会话中与 dwm.exe 的一些交互等)? 如果需要一些管理权限(和/或组策略),这不是问题

谢谢

PS。现在我正在使用 Process.MainWindowHandle 属性(可能使用 GetWindowThreadProcessId 函数)。 我也尝试使用返回错误 161(无效路径)的 OpenWindowStation("\Sessions\1\Windows\WindowStations\WinSta0")

【问题讨论】:

  • 不太可能;提供这样的功能会很复杂,而且没有什么用处。
  • 特定于会话的资源,例如窗口,根本无法跨会话边界访问。您必须在要访问其资源的同一会话中执行一个进程。

标签: session winapi hwnd windows2012 windowstate


【解决方案1】:

您需要在要观察其窗口的桌面上执行代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 2019-06-13
    • 2020-05-06
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多