【发布时间】: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