winapi - 如何获取 Windows 的所有系统/BIOS 信息

标签 winapi go wmi bios

我想知道如何获得关于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”,因为它太窄了。

相反,试着弄清楚

  1. 如何获取有关 Windows 系统的任何信息。
  2. 如何在 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/

相关文章:

c++ - 未显示消息框

string - 问:go-jira: slice 未在模板中 slice 字符串

go - 使用 Golang 启动 D-Bus 服务

c# - WMI 性能不佳

c# - SendKeys 与游戏 : with some characters it works, 但有一些它没有

windows - 从 32 位进程上的 64 位进程调用 VirtualQueryEx 函数

arrays - 奇怪的 golang "append"行为(覆盖 slice 中的值)

c++ - 错误 0x8004100e 连接到 WMI 命名空间

c# - 使用 WMI 的进程启动事件 - 并非检测到所有进程启动

c++ - 如何使用 Win32 解码 JPEG?