golang獲取u盤序列號(通過讀取注冊表實現)


僅供參考
package main

import (
	"fmt"
	"log"
	"os"
	"strconv"
	"strings"

	registry "github.com/golang/sys/windows/registry"
)

func main() {
	//查詢插入的u盤個數
	k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SYSTEM\CurrentControlSet\Services\USBSTOR\Enum`, registry.QUERY_VALUE)
	if err != nil {
		log.Fatal(err)
	}
	defer k.Close()

	n, _, err := k.GetIntegerValue("Count")
	if err != nil {
		log.Fatal(err)
	}
	if n < 1 {
		fmt.Println("沒有檢測到u盤!")
		os.Exit(-1)
	}

	//查詢u盤序列號
	var sn, pvid, vid, pid string
	information, _, err := k.GetStringValue(strconv.Itoa(0))
	strn := strconv.FormatUint(n, 10) //n是uint64類型,先轉成string
	nInt, _ := strconv.Atoi(strn)     //再轉成int類型
	if n > 1 {
		fmt.Printf("\n檢測到多個u盤,按插入順序輸出u盤信息\n\n")
	}
	for i := 0; i < nInt; i++ {
		information, _, err = k.GetStringValue(strconv.Itoa(i))
		if err != nil {
			log.Fatal(err)
		}
		sn = strings.Split(information, "\\")[2]
		pvid = strings.Split(information, "\\")[1]
		vid = strings.Split(pvid, "&")[0]
		vid = strings.Split(vid, "_")[1]
		pid = strings.Split(pvid, "&")[1]
		pid = strings.Split(pid, "_")[1]
		fmt.Println("當前u盤sn碼:", sn)
		fmt.Println("當前u盤vid: ", vid)
		fmt.Println("當前u盤pid: ", pid)
		fmt.Println("")
	}
}


參考鏈接: https://godoc.org/golang.org/x/sys/windows/registry

20190318更新,此方法不適於慧榮主控的u盤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM