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

时间:2017-11-14 20:28:04

标签: 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 ,我根本找不到类似的东西。 可以吃另类吗?

1 个答案:

答案 0 :(得分:2)

关于编程方法论的迂回

(很抱歉绕道而行,但我想我必须这样做。)

你从错误的角度攻击你的问题。 编程不是寻找随机包,尝试它, 看到它失败并寻求帮助; 它相当于发明解决问题的一般方法 在手边,然后试图弄清楚有什么可以解决它。

例如,在您的情况下,它可能很容易变得富有成效 搜索" BIOS +信息+ golang"因为它太窄了。

相反,试着找出

  1. 如何在Windows上获取有关系统任何信息
  2. 如何在Go中做到这一点。
  3. 虽然这很无聊,但我还是建议阅读 this认真对待:这真的会有所帮助 你解决了未来的编程挑战。

    手头的问题

    好的,现在回到你的问题。

    在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的问题。