ท่า enumerate serial comm

บนวินโดว์ เวลาเราเสียบอุปกรณ์ที่เป็น serial communication (serial port, usb2serial หรืออะไรทำนองนี้) มันจะไป map อยู่ที่ “HKLM\HARDWARE\DEVICEMAP\SERIALCOMM” ดังนั้นเราจะใช้ท่าการ query ออกมา

import _winreg as wr

reg = wr.ConnectRegistry(None, wr.HKEY_LOCAL_MACHINE)
key = wr.OpenKey(reg, r'HARDWARE\\DEVICEMAP\\SERIALCOMM')

comms = []
i = 0
while None:
  try:
    name, value, t = wr.EnumValue(key, i)
    comms.append(value)
    i = i + 1
  except WindowsError:
    break

wr.CloseKey(key)
wr.CloseKey(reg)

# print serial comm list
print comms

โค้ดด้านบนจะเห็นว่าเราใช้กลไก exception เป็นตัวควบคุมวงรอบการทำงานเลย

หรืออีกท่า ตอนเขียนด้วย tcl กำหนด key ตรงๆ ได้เลย

package require registry

set key "HKEY_LOCAL_MACHINE\\\\HARDWARE\\\\DEVICEMAP\\\\SERIALCOMM"
set vals [ registry values $key ]

foreach v $vals {
  puts [ registry get $key $v ]
}

โค้ดทั้งสองภาษาไม่ตรงกัน เพิ่งลอง tcl ได้แว๊บเดียว

หมายเหตุ: python ใช้ official package ส่วน tcl ใช้ ActiveTcl

update: แก้โค้ด tcl ให้ทำงานได้

Leave a Reply