dt_automate/vendor/github.com/super-l/machine-code/goos/windows.go
2025-02-19 18:30:19 +08:00

123 lines
3.2 KiB
Go

//go:build windows
// +build windows
package goos
import (
"errors"
"fmt"
"github.com/super-l/machine-code/types"
"os/exec"
"strings"
"syscall"
)
type WindowsMachine struct{}
func (w WindowsMachine) GetMachine() (types.MachineInformation, []error) {
var errs []error
platformUUID, err := w.GetUUID()
if err != nil {
errs = append(errs, err)
}
boardSerialNumber, err := w.GetBoardSerialNumber()
if err != nil {
errs = append(errs, err)
}
cpuSerialNumber, err := w.GetCpuSerialNumber()
if err != nil {
errs = append(errs, err)
}
diskSerialNumber, err := w.GetDiskSerialNumber()
if err != nil {
errs = append(errs, err)
}
macAddr, err := GetMACAddress()
if err != nil {
errs = append(errs, err)
}
machineData := types.MachineInformation{
UUID: platformUUID,
BoardSerialNumber: boardSerialNumber,
CpuSerialNumber: cpuSerialNumber,
DiskSerialNumber: diskSerialNumber,
Mac: macAddr,
}
return machineData, errs
}
// 获取主板编号
func (WindowsMachine) GetBoardSerialNumber() (string, error) {
cmd := exec.Command("wmic", "baseboard", "get", "serialnumber")
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} // @bestK 提交
b, err := cmd.CombinedOutput()
if err == nil {
serialNumber := string(b)
serialNumber = serialNumber[12 : len(serialNumber)-2]
serialNumber = strings.ReplaceAll(serialNumber, "\n", "")
serialNumber = strings.ReplaceAll(serialNumber, " ", "")
serialNumber = strings.ReplaceAll(serialNumber, "\r", "")
return serialNumber, nil
}
return "", err
}
// 获取硬盘编号
func (WindowsMachine) GetDiskSerialNumber() (serialNumber string, err error) {
cmd := exec.Command("wmic", "diskdrive", "get", "serialnumber")
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} // @bestK 提交
output, err := cmd.Output()
if err != nil {
return "", err
}
result := strings.TrimSpace(string(output))
lines := strings.Split(result, "\n")
if len(lines) > 1 {
return strings.TrimSpace(lines[1]), nil
}
return "", fmt.Errorf("diskdrive serial number not found")
}
// 获取系统UUID
func (WindowsMachine) GetUUID() (string, error) {
// wmic csproduct get uuid || wmic csproduct list full | findstr UUID
var cmd *exec.Cmd
cmd = exec.Command("wmic", "csproduct", "get", "uuid")
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} // @bestK 提交
b, err := cmd.CombinedOutput()
var uuid string
if err == nil {
uuid = string(b)
uuid = uuid[4 : len(uuid)-1]
uuid = strings.ReplaceAll(uuid, "\n", "")
uuid = strings.ReplaceAll(uuid, " ", "")
uuid = strings.ReplaceAll(uuid, "\r", "")
return uuid, nil
}
return "", errors.New("csproduct uuid not found")
}
// 获取CPU序列号
func (WindowsMachine) GetCpuSerialNumber() (string, error) {
// wmic cpu get processorid
var cpuid string
cmd := exec.Command("wmic", "cpu", "get", "processorid")
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} // @bestK 提交
b, err := cmd.CombinedOutput()
if err == nil {
cpuid = string(b)
cpuid = cpuid[12 : len(cpuid)-2]
cpuid = strings.ReplaceAll(cpuid, "\n", "")
cpuid = strings.ReplaceAll(cpuid, " ", "")
cpuid = strings.ReplaceAll(cpuid, "\r", "")
return cpuid, err
}
return "", errors.New("cpu processorid not found")
}