ท่า 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 ให้ทำงานได้