Windows中使用Golang登录的用户

时间:2018-06-19 14:50:06

标签: windows go

我需要使用Golang获取本地Windows计算机上当前登录的用户。我不是要查找当前正在运行该应用程序的用户,该用户可以从内置函数user.Current()获取。

我可以从cmd调用query user,这给了我所需的用户列表(需要字符串操作,但这不是问题)。

我尝试过的代码是:

out, err := exec.Command("query", "user")
if err != nil {
  panic(err)
}
// ...do something with 'out'

这将产生错误panic: exit status 1。如果这样做,也会发生同样的情况:

out, err := exec.Command("cmd", "/C", "query", "user")
...

1 个答案:

答案 0 :(得分:1)

通常会遇到这类问题, 解决方案是这样进行:

  1. 研究(使用MSDN和其他来源)如何实现 使用Win32 API声明目标。
  2. 使用内置的syscall软件包(或者,如果可用/需要, 助手3rd-party软件包)从Go发出这些呼叫。

第一步可以是this 产生the solution 基本上就是“使用WTS”。

要走的路是

  1. 连接到WTS子系统¹。
  2. 枚举当前活动的会话。
  3. 向每个查询有关 与之关联的用户的身份。

第二步比较棘手,但基本上您需要研究 别人怎么做。 参见thisthisthis为例。

您可能还会在其中查看名为_windows*.go的文件 the Go source of the syscall package


¹注意,即使在单用户计算机上,所有内容 与座位/会议管理相关的信息通过WTS发出 (但是cast割取决于Windows的特定风格)。至少从XP / W2k3开始就是这样。