我正在尝试获取winstation的名称(例如“winsta0”),即仅使用其进程ID打开了一个单独的进程。我在MSDN上找不到任何这样的功能。它们似乎只有GetProcessWindowStation(),它只适用于您自己的进程。
有什么想法吗?
更新: 也许这是这个难题的一部分......
BOOL ProcessIdToSessionId( __in DWORD dwProcessId, __out DWORD * pSessionId );
答案 0 :(得分:1)
您可能必须使用EnumWindowStations(),EnumDesktops(),EnumDesktopWindows()和GetWindowThreadProcessId()来查看所有正在运行的窗口,直到找到与所需进程ID匹配的窗口。
答案 1 :(得分:0)
好吧,我看了一下API函数,但遇到了与你相同的死胡同。只要目标进程创建一个或多个顶级窗口,Remy的建议就应该有效。以下,疯狂的想法也发生在我身上:
注入的代码将调用GetProcessWindowStation(),然后使用IPC机制将其发送回您的进程。获得它之后,使用VirtualFreeEx()来恢复目标进程的原始地址空间。在另一个用户的进程中使用此问题还有一些其他问题,但如果您以管理员身份运行它仍然有用。