|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
大家好,近来有需求编写一段代码去获取电脑中的串行口,
于是从网上搜索了几种方法:
试了几种不同方法,但都不太稳定可靠,然后找到读取系
统注册表来获取系统中的串口行方法,这种方法除了可靠、
快捷还实时,即便是USB转接出来的串行口,在拔插之后
注册表仍然会实时变动的,找到方法就进一步去实现了,
在微软官网找到如下一段代码,这段代码也被“高手们”
直接抄了发贴到CSDN,之所以加双引号的高手,就是抄的
人连变量名称都不带改动的!!代码范例如下:
- const HKEY_LOCAL_MACHINE = &H80000002
- strKeyPath = "SOFTWARE\NewKey"
- strComputer = "."
- iValues = Array("string1", "string2")
- Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\" & strComputer & "\root\default:StdRegProv")
- MultValueName = "Example Multistring Value"
- oReg.GetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath,MultValueName,iValues
- For Each strValue In iValues
- WScript.echo strValue
- Next
复制代码 我必须要吐槽以上这段代码了,首先代码属于微软官方很学术
写法,放在微软官网是没有问题,但CSDN的“高手”们照抄却
是害死了不少业余初学者:
①冗长的变量名对英语不好的中国初学者极不友好!
例如:strKeyPath,你改成拼音lujing(路径)或者一个简单
字母L,然后后面注释一下就都明白了!
②没必要变量太多了,理论上还占用系统资源!我作一个初学者
多年来接触这些编程教程,发现有一个极不友好的教学方法,
写代码的“高手们”似乎都很喜欢搞出许多变量出来,
常常是:A的值是多少呢,看看B吧,那B的值是多少呢?
噢!其实是从C那里获取的!那C的值又怎么来的呢?
其实C的值就是5罗!我靠!你直接a = 5行不!!
例如以上代码:变量strComputer其实就是一个英文小数点!
为了TMD一个英文小数点居然要用11个英文字母去代表,
而更过份的是,下面的代码中还要CPU再做一次字符串合并
的操作!就直接 \\.\root\default……会死吗?
③多余的声明一大堆:const HKEY_LOCAL_MACHINE = &H80000002
直接把&H80000002换到第7句的相应位置的参数中就好了,他偏不!
某些极端的例子中,那些声明比核心起主要作用的代码还要多!
初学者往往看着就头晕!教学者初心再好都打击人家的学习兴趣!
基于以上缺点!我认为教写代码的人,最好的方法应该是:
必须要尽快让代码足够简单,并能直接能跑起来,然后再慢慢详细讲
里面参数和结构,这样学习的人不至于看半天了,结果那冗长的代码还是
一运行就这里出错,那里不行,非常打击学习信心!!
以下是我相同功能的代码范例:
- Sub 获取本电脑的串行口()
- k = 1
- Set zcb = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") '创建访问系统信息的对象
- zcb.EnumValues &H80000002, "HARDWARE\DEVICEMAP\SERIALCOMM", C '读取&H80000002(HKEY_LOCAL_MACHINE)主目录下指定路径中子目录所有键的名称并存放到数组C中
- For Each i In C
- zcb.GetStringValue &H80000002, "HARDWARE\DEVICEMAP\SERIALCOMM", i, s '获取该COM口的号数(这个键的键值)存放到变量s中
- Cells(k, 1) = s
- k = k + 1
- Next
- End Sub
复制代码 注释:
第1行,过程开始
第2行,k是表格中行数变量
第3行,创建名为zcb(注册表拼音)对象,{impersonationLevel……是访问系统注册表的参数,
第4行,EnumValues获取指定注册表目录下所有键的名称,返回值存放到一个数组C中,
&H80000002表示访问是注册表HKEY_LOCAL_MACHINE目录,以下是其它目录参数,直接
换上就即可
HKEY_CLASSES_ROOT &H80000000
HKEY_CURRENT_USER &H80000001
HKEY_USERS &H80000003
HKEY_CURRENT_CONFIG &H80000005
&H80000002和"HARDWARE\DEVICEMAP\SERIALCOMM"一起就是描述注册表路径:
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM
第5行,循环C数组中的键名称
第6行,GetStringValue获取指定注册表目录(和第4行一样),i名称的键的数值,
返回值存放到一个字符串变量s中
第7行,把s的值赋值到EXCEL表格,第k行第1列中,其中k从1第1行开始。
第8行,k自增1
第9行,循环结束
第10行,过程结束
以上代码中的变量名字:k、zcb、i、C、s,可随便改为其他合法的变量名字。
我相信像我这样教学方法,对于英语水平不太高中国业余初学者会友好得多了。
|
评分
-
1
查看全部评分
-
|