From 8d0b118624c11eb136b45947544dbd9ae6117483 Mon Sep 17 00:00:00 2001 From: abakum Date: Mon, 3 Feb 2025 22:11:50 +0300 Subject: [PATCH] nativeGetPortsList for Windows --- portlist/portlist.go | 2 ++ serial_windows.go | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/portlist/portlist.go b/portlist/portlist.go index f348683..e515333 100644 --- a/portlist/portlist.go +++ b/portlist/portlist.go @@ -19,6 +19,7 @@ import ( "fmt" "log" + "github.com/abakum/go-serial" "github.com/abakum/go-serial/enumerator" ) @@ -40,4 +41,5 @@ func main() { fmt.Printf(" USB serial : %s\n", port.SerialNumber) } } + fmt.Println(serial.GetPortsList()) } diff --git a/serial_windows.go b/serial_windows.go index 2affd3b..eb97826 100644 --- a/serial_windows.go +++ b/serial_windows.go @@ -32,7 +32,7 @@ type windowsPort struct { handle windows.Handle } -func nativeGetPortsList() ([]string, error) { +func nativeGetPortsList() (list []string, err error) { key, err := registry.OpenKey(windows.HKEY_LOCAL_MACHINE, `HARDWARE\DEVICEMAP\SERIALCOMM\`, windows.KEY_READ) switch { case errors.Is(err, syscall.ERROR_FILE_NOT_FOUND): @@ -44,10 +44,17 @@ func nativeGetPortsList() ([]string, error) { } defer key.Close() - list, err := key.ReadValueNames(0) + names, err := key.ReadValueNames(0) if err != nil { return nil, &PortError{code: ErrorEnumeratingPorts, causedBy: err} } + for _, name := range names { + item, _, err := key.GetStringValue(name) + if err != nil { + continue + } + list = append(list, item) + } return list, nil }