如何在另一个会话中访问窗口

时间:2015-06-19 08:21:18

标签: session winapi hwnd windows2012 windowstate

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

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

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

谢谢

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

1 个答案:

答案 0 :(得分:1)

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