我想知道如何获得关于PC 和 BIOS 的完整信息。我看到这篇文章 - https://groups.google.com/forum/#!msg/golang-nuts/pKuFQxAy4P4/62FnqGON1pEJ
代码:
package main
import (
"fmt"
"github.com/ochapman/godmi"
)
func main(){
BS:=godmi.GetBIOSInformation()
fmt.Println("BS:",BS)
sys:=godmi.GetSystemInformation()
fmt.Println("sys:",sys)
BB:=godmi.GetBaseboardInformation()
fmt.Println("BB:",BB)
}
我无法编译,因为有一个错误:
# github.com/ochapman/godmi
go\src\github.com\ochapman\godmi\godmi.go:674:13: undefined: syscall.Mmap
go\src\github.com\ochapman\godmi\godmi.go:674:79: undefined: syscall.PROT_RE
go\src\github.com\ochapman\godmi\godmi.go:674:98: undefined: syscall.MAP_SHA
go\src\github.com\ochapman\godmi\godmi.go:680:8: undefined: syscall.Munmap
据我所知,它只适用于 Linux,对于 Windows 我根本没有找到类似的东西。 可以吃替代品吗?
最佳答案
关于编程方法论的迂回
(对不起,我绕了个弯,但我想我必须做到。)
您从错误的角度来解决您的问题。 编程不是随便找一个包,试一试, 看到它失败并寻求帮助; 而是发明一种解决问题的通用方法 手头,然后试图弄清楚有什么可以解决它。
例如,在您的情况下,它可能很容易没有成果 搜索“BIOS+information+golang”,因为它太窄了。
相反,试着弄清楚
- 如何获取有关 Windows 系统的任何信息。
- 如何在 Go 中做到这一点。
虽然很无聊,但还是要推荐一下 this认真地说:这真的有帮助 您将解决 future 的编程挑战。
手头的问题
好的,现在回到你的问题。
在 Windows 上,获取系统信息的标准方法 正在查询所谓的Windows Management Instrumentation (or WMI for short)子系统。
了解这一点后,您应该深入研究这两个方向:
您需要执行哪些 WMI 调用才能获取信息 这是你感兴趣的。
这个很容易搜索。 我这样做的第一个命中是 this 我想说这是一个很好的开始。
如何从 Go 调用 WMI。
这可以通过两种方式完成:
直接手动实现。 Go 对动态加载 Windows DLL 有很好的内置支持 并从中调用函数。
This很好地演示了基本概念。
使用现成的包。 同样,快速搜索会产生
github.com/StackExchange/wmi
.
所以,如果我是你,我会首先编写适合我需要的 WMI 调用的代码 在 WSH 上使用 VBS 或 JScript(或诸如此类) 然后使用任何描述的方法将该解决方案“移植”到 Go。
关于winapi - 如何获取 Windows 的所有系统/BIOS 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47294617/