A:增加工具函数;增加部分测试照片
This commit is contained in:
1 parent
150d398db6
commit
ae8f64d53b
23 files changed
+1850
No files matched your search
@@ -0,0 +1,166 @@
|
||||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// getCPUInfoPlatform 获取Windows下的CPU信息
|
||||
func (s *SysUtils) getCPUInfoPlatform(info *CPUInfo) {
|
||||
cmd := exec.Command("wmic", "cpu", "get", "name", "/value")
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
lines := strings.Split(string(output), "\n")
|
||||
for _, line := range lines {
|
||||
if strings.HasPrefix(line, "Name=") {
|
||||
info.ModelName = strings.TrimSpace(strings.TrimPrefix(line, "Name="))
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// getMemoryInfoPlatform 获取Windows下的内存信息
|
||||
func (s *SysUtils) getMemoryInfoPlatform(info *MemoryInfo) {
|
||||
kernel32 := syscall.NewLazyDLL("kernel32.dll")
|
||||
globalMemoryStatusEx := kernel32.NewProc("GlobalMemoryStatusEx")
|
||||
|
||||
type memoryStatusEx struct {
|
||||
dwLength uint32
|
||||
dwMemoryLoad uint32
|
||||
ullTotalPhys uint64
|
||||
ullAvailPhys uint64
|
||||
ullTotalPageFile uint64
|
||||
ullAvailPageFile uint64
|
||||
ullTotalVirtual uint64
|
||||
ullAvailVirtual uint64
|
||||
ullAvailExtendedVirtual uint64
|
||||
}
|
||||
|
||||
var memStatus memoryStatusEx
|
||||
memStatus.dwLength = uint32(unsafe.Sizeof(memStatus))
|
||||
|
||||
ret, _, _ := globalMemoryStatusEx.Call(uintptr(unsafe.Pointer(&memStatus)))
|
||||
if ret != 0 {
|
||||
info.Total = memStatus.ullTotalPhys
|
||||
info.Available = memStatus.ullAvailPhys
|
||||
info.Used = info.Total - info.Available
|
||||
}
|
||||
}
|
||||
|
||||
// getDiskUsagePlatform Windows平台获取磁盘信息
|
||||
func (s *SysUtils) getDiskUsagePlatform(path string) (*DiskInfo, error) {
|
||||
kernel32 := syscall.NewLazyDLL("kernel32.dll")
|
||||
getDiskFreeSpaceEx := kernel32.NewProc("GetDiskFreeSpaceExW")
|
||||
|
||||
var freeBytesAvailable uint64
|
||||
var totalNumberOfBytes uint64
|
||||
var totalNumberOfFreeBytes uint64
|
||||
|
||||
pathPtr, _ := syscall.UTF16PtrFromString(path)
|
||||
ret, _, _ := getDiskFreeSpaceEx.Call(
|
||||
uintptr(unsafe.Pointer(pathPtr)),
|
||||
uintptr(unsafe.Pointer(&freeBytesAvailable)),
|
||||
uintptr(unsafe.Pointer(&totalNumberOfBytes)),
|
||||
uintptr(unsafe.Pointer(&totalNumberOfFreeBytes)),
|
||||
)
|
||||
|
||||
if ret == 0 {
|
||||
return nil, fmt.Errorf("获取磁盘信息失败")
|
||||
}
|
||||
|
||||
used := totalNumberOfBytes - totalNumberOfFreeBytes
|
||||
usedPct := float64(used) / float64(totalNumberOfBytes) * 100
|
||||
|
||||
return &DiskInfo{
|
||||
Path: path,
|
||||
Total: totalNumberOfBytes,
|
||||
Free: totalNumberOfFreeBytes,
|
||||
Used: used,
|
||||
UsedPct: usedPct,
|
||||
FileSystem: "NTFS", // Windows通常是NTFS,这里简化处理
|
||||
}, nil
|
||||
}
|
||||
|
||||
// getAllDrivesWindows 获取所有磁盘驱动器列表
|
||||
func (s *SysUtils) getAllDrivesWindows() ([]string, error) {
|
||||
kernel32 := syscall.NewLazyDLL("kernel32.dll")
|
||||
getLogicalDrives := kernel32.NewProc("GetLogicalDrives")
|
||||
|
||||
ret, _, _ := getLogicalDrives.Call()
|
||||
if ret == 0 {
|
||||
return nil, fmt.Errorf("获取驱动器列表失败")
|
||||
}
|
||||
|
||||
var drives []string
|
||||
for i := 0; i < 26; i++ {
|
||||
if ret&(1<<uint(i)) != 0 {
|
||||
drive := string(rune('A'+i)) + ":\\"
|
||||
drives = append(drives, drive)
|
||||
}
|
||||
}
|
||||
|
||||
return drives, nil
|
||||
}
|
||||
|
||||
// getAllDisksInfoPlatform Windows平台获取所有磁盘信息
|
||||
func (s *SysUtils) getAllDisksInfoPlatform() ([]*DiskInfo, error) {
|
||||
var disks []*DiskInfo
|
||||
|
||||
drives, err := s.getAllDrivesWindows()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, drive := range drives {
|
||||
diskInfo, err := s.GetDiskUsage(drive)
|
||||
if err != nil {
|
||||
continue // 跳过无法访问的驱动器
|
||||
}
|
||||
disks = append(disks, diskInfo)
|
||||
}
|
||||
|
||||
return disks, nil
|
||||
}
|
||||
|
||||
// getGPUInfoPlatform 获取Windows下的GPU信息
|
||||
func (s *SysUtils) getGPUInfoPlatform() []string {
|
||||
var gpus []string
|
||||
|
||||
// 使用wmic获取GPU信息
|
||||
cmd := exec.Command("wmic", "path", "win32_VideoController", "get", "name", "/value")
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
return gpus
|
||||
}
|
||||
|
||||
lines := strings.Split(string(output), "\n")
|
||||
for _, line := range lines {
|
||||
if strings.HasPrefix(line, "Name=") && len(line) > 5 {
|
||||
gpu := strings.TrimSpace(strings.TrimPrefix(line, "Name="))
|
||||
if gpu != "" {
|
||||
gpus = append(gpus, gpu)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return gpus
|
||||
}
|
||||
|
||||
// getSystemUptime 获取Windows系统启动时间
|
||||
func (s *SysUtils) getSystemUptime() time.Duration {
|
||||
kernel32 := syscall.NewLazyDLL("kernel32.dll")
|
||||
getTickCount64 := kernel32.NewProc("GetTickCount64")
|
||||
|
||||
ret, _, _ := getTickCount64.Call()
|
||||
return time.Duration(ret) * time.Millisecond
|
||||
}
|
||||
Reference in new issue
Block a user