我有一个应用程序运行(在交互式桌面)作为系统。应用程序需要以当前登录用户的身份启动浏览器或电子邮件客户端。
我想我只要看看桌面、windows工作站或会话,就能确定我在哪个用户的登录桌面上运行。然而,当我从桌面、windows工作站和会话中获取用户信息时,它们似乎都是特殊帐户(例如"logonsessionid_0_4005652")。
一种看起来很有希望的方法是调用WTSQuerySessionInformationW(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName, ...)
。这产生了登录用户名,我可以调用LookupAccountNameW()
来获得SID。
微软关于WTSQuerySessionInformationW的文档中的这一点让我有点不舒服…
检索指定RD会话主机服务器上指定会话的会话信息。(强调我的)
…还有…
如果远程桌面服务未运行,调用WTSQuerySessionInformation失败。
我似乎记得那"家";以前的Windows版本不支持远程桌面。我们的应用面向Windows 10和Windows 11。我可以确定吗WTSQuerySessionInformationW
呼叫将为所有用户工作?
ProcessIdToSessionId
在你自己,然后WTSQueryUserToken
应该给你一个令牌,你可以使用CreateProcessAsUser
。
另一个选择是FindWindow
找到任务栏并复制资源管理器。费用令牌。如果资源管理器未运行,此操作将不起作用。