上回写了js通过ActiveX控件执行powershell .ps1文件,这次让我们来看看powershell如何实现串口。
微软的文档说powershell是建立在.NetFramework框架上的,老规矩我们就可以调用它的API,然而我只有js的基础,又如何了解C#的语法呢?这些都不是你要关心的问题!网上说C#是为了抗衡JAVA所出的,所以动Java应该就懂C#。
说实话我真很不适应C#的事件委托,这也闹心了题主很久,完全跟js的事件不一样。实际在powershell中完全不用事件委托,而是采用和js一样的订阅模式(事件绑定,监听事件,回调函数)。
powershell既然是建立在.NetFramework框架上的那么它是基于类(class)的,而js是基于构造函数的,这是两者的不同,在js中我们通过new实例化一个对象,而powershell中通过new-object来实例化一个对象,当然实例化wmi对象有轻微的区别!
今天重点的要说2个命令和1个类:
1、get-event /*获取事件*/
register-objectevent /*注册事件对象*/
-inputobject
-eventname
-action
2、system.Io.Ports.serialPort /*串口类*/
打开powershell的帮助文档我们可以看到 register-objectevent的原型是下面这样子的
我们看到有很多参数,但是实际需要用到的只有上面三个,我们先来看个官方文档的例子
感觉有点太复杂,简化一下
这个例子有点像js里面的setinterval(定时器),首先通过new-object实例化了一个对象,设置了两个属性的值,分别为间隔时间,打开定时器,然后注册了一个事件对象,监听elapsed事件,会触发action里面的command,也就是把1+1的值输出到屏幕上。
那么我们现在把上面的代码替换成下面的
同样的使用实例化了一个对象,只是这次的类有点不一样了,可以看到serialport就是上面说的那个串口类,它有很多属性和方法,当然还包括了一个事件
datareceived,这里属性值的设置我们只通过参数设置了com口为com3,波特率,检验位,数据位,停止位均采用了默认值,如下是官方文档的截图
与之前案例不同的是这里还调用了两方法,open()打开串口
readexisring()读取数据,到此为止我们完成了代码部分的工作。
下面是在一台电脑上实验需要准备的两个小软件
1.串口调试精灵
2.virtual serial port
这里我们用virtual serial port实现了com4发,com3收,虽然也有把com口短接的,很显然对于我来说这种方式跟方便!
那么就可以用串口调试精灵从com4发送数据,而使用powershell写代码从com3读取数据并显示到控制台了。
还有串口类和注册事件对象不明白的地方可以去微软官网看看原型呦!
最后的彩蛋
如果使用了-action参数,事件是不会添加到事件队列的呦,也就是使用get-event无法获取到事件对象!