比如说,如果我有一个进程 ID 或者它的句柄,我能得到 window station 吗?该进程运行在什么条件下?
最佳答案
不是直接的,但试试这个:
调用
EnumWindowStations()
在与调用进程相同的 Session 中枚举可用的窗口站(如果您需要在另一个 Session 中查询进程,那么这将不起作用)。对于每个窗口站,请调用
EnumDesktops()
枚举其桌面。对于每个桌面,请调用
EnumDesktopWindows()
枚举其顶级窗口。对于每个窗口,调用
GetWindowThreadProcessId()
获取其进程 ID 并将其与您要查找的 ID 进行比较。
另一种选择可能是执行以下操作:
调用
OpenProcess()
从目标进程 ID 获取HANDLE
。调用
NtQueryInformationProcess()
检索进程的地址PEB
结构。调用
ReadProcessMemory()
阅读PEB
。它的ProcessParams.DesktopName
字段包含当前与该进程相关联的工作站/桌面的名称(PEB.ProcessParams
中还有更多字段可用,然后是 MSDN 显示的内容)。解析
DesktopName
以提取窗口站和桌面名称。根据需要枚举工作站,从
GetUserObjectInformation()
中寻找匹配名称.
关于c++ - 如何获得给定进程的窗口站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23144350/