说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB对低层硬件的访问控制

HTML文档下载 WORD文档下载 PDF文档下载
VB对低层硬件的访问控制
淄博学院职业技术学院
王军
---- VB没有提供直接访问低层硬件的控件和方法,一度给对访问硬件感兴趣的编程者带来不便。目前我们可从网上搜索到支持低层硬件访问的DLL和ActiveX控件,通过它们可读写存储器单元、端口,甚至控制硬件中断。下面通过两个利用DLL和ActiveX控件示例介绍VB对低层硬件的访问控制。

---- 一、利用DLL读写端口

---- 若在应用程序中只是简单地读写端口,利用DLL编程实现较为简便。从http://personal.vsnl.com/sr网站可下载一个免费的32位VBIO.DLL,该连接库允许在VB4、5或6中使用,共有七个函数和过程分别为:

Anjan DLL的解锁过程
Inp 端口读字节函数
Inpw 端口读字函数
Out 端口写字节过程
Outw 端口写字过程
GetLptBaseAddr 获取并口基地址的函数
GetComBaseAddr 获取串口基地址的函数

---- 图1是一个发声示例程序的窗体,在输入框中键入一频率值并按SoundOn钮,则在PC机的扬声器中发出指定频率音调,程序中对音调的变化、声音的开关是用VBIO.DLL的过程和函数访问发声系统的定时器/计数器和控制端口实现的。编程要点:1、应在Form _Load中加入Anjan解锁过程。2、若在模块中声明函数和过程,应去掉private或用Public替代。3、VBIO.DLL应拷贝到\windows\system子目录下。

---- 程序清单:

Option Explicit
Private Declare Sub
Anjan Lib "vbio.dll" ()
Private Declare Function
Inp Lib "vbio.dll" (ByVal port&) As Integer
Private Declare Function
Inpw Lib "vbio.dll" (ByVal port&) As Long
Private Declare Sub
Out Lib "vbio.dll" (ByVal port&, ByVal byt%)
Private Declare Sub
Outw Lib "vbio.dll" (ByVal port&, ByVal wrd&)
Private Declare Function
GetLptBaseAddr Lib "vbio.dll" (ByVal lpt&) As Integer
Private Declare Function
GetComBaseAddr Lib "vbio.dll" (ByVal com&) As Integer

Public Sub SetFreq(soundHz As Integer)
’设置频率
If soundHz Then
Dim divisor As Long
divisor = 1193180 / soundHz
'计算时间常数
Out &H42, &HB6
'8253-5通道2设置为方式3
Out &H42, divisor Mod 256
'送时间常数
Out &H42, divisor \ 256
'
Speaker True
Else
Speaker False
End If
End Sub

Public Sub Speaker(sOn As Boolean)
’开关声音
Dim portVal As Integer
portVal = Inp(&H61)
'
If sOn Then
portVal = portVal Or 3
'低位为通道2的门控信号
Else
'次低位为整形与门控制信号
portVal = portVal And (Not 3)
End If
Out &H61, portVal

End Sub

Private Sub Form_Load()
Anjan
’软件解锁
End Sub

Private Sub SoundOff_Click()
Speaker False
End Sub

Private Sub SoundOn_Click()
SetFreq Val(TextHz)
End Sub

---- 二、利用ActiveX处理硬件中断

---- 在应用程序中如果需要访问存储单元、端口以及处理硬件中断,使用TVicHW32 ActiveX控件是一很好的选择,该控件是一个共享软件,支持Windows 95/98/NT,可从http://www.entechtaiwan.com/tools.htm处下载。该控件除具备直接访问存储单元和端口的功能外,还提供了丰富的处理并口的属性和方法,以及处理硬件中断的属性、方法和事件,极大地拓展了VB对低层硬件的访问控制。下面通过一个显示键盘中断次数和按键扫描码的示例介绍控件的使用过程。

---- 1、下载TVicHW32压缩软件包并解压到一个目录中,如\HW。把driver子目录下的vichw00.vxd文件拷贝到\windows\system子目录下,该文件是控件访问硬件的驱动程序,使用控件前先用OpenDriver打开,最后用Close_Driver方法关闭。

---- 2、把ocx子目录下的tvichw32.ocx拷贝到\windows\system子目录下,并在DOS命令行状态下键入以下命令进行注册。

---- regsvr32 tvichw32.ocx

---- 3 、在VB环境下通过菜单工程--部件--控件并选择TVicHW32 ActiveX Control Module将控件添加到工具箱中。

---- 4、相关的属性、方法及事件

---- 方法 OpenDriver 打开支持访问硬件的驱动程序vichw.vxd(windows95下)

---- 方法 CloseDriver 关闭驱动程序

---- 属性 ActiveHW As Bool 驱动程序打开则为True;关闭为False 中断事件 OnHwInterrupt(ByVal HwCounter As Long,

ByVal LPT_DataReg As Integer,
ByVal LPT_StatusReg As Integer,
ByVal ScanCode As Integer
)
参数
HwCounter : 中断次数
LPT_DataReg : 如果使用IRQ7,则为打印并口的数据
LPT_StatusReg : 如果使用IRQ7,则为打印并口的数据
ScanKode : 如果使用IRQ1,则为按键的扫描码
属性 IRQNumber 指定中断号,范围IRQ1--15
属性 IRQMasked 中断非屏蔽则为True;屏蔽为False

---- 图2(略)是示例的窗体,程序运行后首先按Open_Driver钮打开驱动程序,然后选择Unmarsk复选框开放中断,此时每按一次键框中分别显示该键的扫描码和中断次数。处理其它中断只需更改中断号即可(中断号1--15)。

---- 程序清单:

Public Sub ShowButtons()
Open_Driver.Enabled = Not HwCtrl.ActiveHW
Close_Driver.Enabled = HwCtrl.ActiveHW
B_Unmask.Enabled = HwCtrl.ActiveHW
End Sub

Private Sub Form_Load()
ShowButtons
End Sub

Private Sub Open_Driver_Click()
HwCtrl.OpenDriver '打开驱动程序
If Not HwCtrl.ActiveHW Then
MsgBox ("The driver VICHWxx not found")
Else:
HwCtrl.IRQNumber = 1 '中断号为1,键盘中断
End If
ShowButtons
End Sub

Private Sub Close_Driver_Click()
HwCtrl.CloseDriver '关闭驱动程序
B_Unmask.Value = 0
ShowButtons
End Sub

Private Sub B_Unmask_Click()
If B_Unmask.Value = 0 Then
HwCtrl.IRQMasked = True
Else
HwCtrl.IRQNumber = 1
Scan_Code = 0
HwCtrl.IRQMasked = False '开放中断
End If
End Sub

Private Sub HwCtrl_OnHwInterrupt(ByVal HwCounter
As Long, ByVal LPT_DataReg As Integer, ByVal
LPT_StatusReg As Integer, ByVal ScanCode As Integer)
Scan_Code.Caption = ScanCode
IRQC.Caption = HwCounter
End Sub

VB如何修改Foxpro数据库(不是用VB实现的,不过也可以看看) VB如何在 SQL 语句中使用日期? 返回 VB如何在表中保存单引号? VB如何抓出 Access 的 Table 欄位中的【敘述】部份呢? 实现Access数据库的Web查询-VB资料 使用Visual Basic访问数据库几个注意的问题 数据库查询-VB资料 数据约束控件和 RecordSet-VB资料 锁住数据库中的表 -VB资料 谈谈VB的数据库编程方式 为VB5辩解: VB处理数据库时求数据表记录总数的最佳方法 为什么安装后的数据库应用总是路径不对或找不到? 返回 -VB资料 无论如何,就是只能输入数字-VB资料 VB用 DAO 或 ADO 正确访问 Access 2000 VB用CELL组件显示Access数据库的图片对象 VB用DAO打开Excel文件 VB用DATA控件绑定报表控件打印报表 VB用EXCEL来打印报表并生成折线图 VB用EXCEL组件简化VB编程的一种方法 VB用MDB文件做密码库 VB用ODBC API访问ODBC数据库 用VB 实现类电子表格的数据录入 用VB5直接控制Excel 97 用VBA编制Access的查询程序 用VB和RDO访问SQL Server 用VB开发多通道仪表数据采集程序 用VB实现关闭所有数据库对象 用VB实现类电子表格的数据录入 VB用代码创建数据库,表,字段 VB用类来编写数据库程序 优化OLE的调用频率-VB资料 IIS不能访问asp文件,只能访问html文件,而且网页中的所有弹出类网页链接全都打不开(在线等) 在JSP里边怎么动态插入文件 设计物流系统应该考虑那些问题,实现那些功能,拜托 设计物流系统应该考虑那些问题,实现那些功能,拜托 php中的register_globals为off,怎么获得url中传递参数 设计物流系统应该考虑那些问题,实现那些功能,拜托 上海日記:震撼 这是为什么? 在JBuilder 下 如何单步debug SOAP 服务器端程序? 求助:手机短信是以什么编码发送的呢?UTF还是普通的GB2312? 另外移动和联通用的编码一样么? 急求《c#高级编程》2nd 英文版! windows 2003 下我的p4x266e 板载声卡驱动好了,但是没有声音,怎么解决? SOS:菜鸟问题! 如何来判断字段类型????初级问题..... 求助:请问vbscript什么函数可以让一个单精度的数保留两位小数 wps2000加密文件问题 程序员调查 C/S下如何访问ODBC数据库,客户端不配置任何东西。 大家有何看法???????????? 程序在系统启动时起动,如何做? 局域網計算機間訪問問題﹐進來看看﹗﹗ 为什么我向数据库插入数字时总是出错? 做网页是用切片好做还是用表格好? ftp代码,求救 中秋节,你和MM咋过的,有过风花雪月的事吗? 庆祝升级!!!一夜间有多了一条裤衩,爽歪歪了 我想捕获特殊字段…………高分…… 如何在iframe中表格边框成虚线? Repeater模版列中如何动态添加checkbox控件? 局网能用,internet上该如何用? 请问如何将自已做的网站在sohu、sina上做链接?收费吗? 请问ID怎么传送!!! 传递参数?? 请教高手:码距、码字概念,请举例说明。 原来有朋友问过我流水号要怎样生成才好,今天把这个函数奉献给CSDN里的新手们! 在PHP中有没有表示“千分位”的函数呢?怎么实现呢 开发工时问题,有数据库开发经验者请进 想上一套抄表系统,熟悉的清介绍一下功能,构造以及价格 TListView出现List index out of bounds 错误 在html里面实现在线播放时怎么定制自己的界面?? 请问谁知道 Result中的getArray()怎么用?如何将得到的sql数组转换成String[]或int[]? 请问用xdoclet生成ejb存根类具体是怎么做的 求助:我想要一个在单文档中使用滚动条的例子,只要很简单的就行,谢谢! applet问题,找了很多论坛高手都没有人能解决! 如何取得客户端的ip 急问:怎样把从库中读取的文件保存在客户端指定的文件名? 高分求助,有没有人见过一个叫TTF160_TLB的pas或dcu文件?在哪儿可以找到 请教:BSTR如何正确使用 小弟初学delphi问个问题 大力救救我!!! 各位可不可以说说,大家在对录入的数据审核时,该如何实现???? 描写维吾尔人载歌载舞时的热闹景象,记住是热闹景象! 已知集合A={x.log2(x-1) 根据在电视中见过的维吾尔人载歌载舞的情景,用一段话描述他们优美的舞姿 英语翻译QUOTE意思不是报价, 提起维吾尔旗,我们眼前就会浮现出他们载歌载舞.(修改病句)卷纸上的题,怀疑会不会有字印错了. 提起维吾尔族我们就会浮现出他们的载歌载舞修改病句 北京的英语角在哪?国贸附近有吗?想练练英语,希望大家给点意见,具体 在三里屯哪啊? 根据在电视中见过的维吾尔人载歌载舞的情景,用一段话描述一下他们优美的舞姿 quote unquote 在《经济学家》上看到的, 至丹以荆卿为计,始速祸焉 怎么翻译 至丹以荆卿为计,中的“以”是什么意思?是“用”的意思吗? 韩国陆军前方哨所一士兵中枪身亡 军方澳大利亚一墓园将举行”恐怖”派对 迎冯小刚好莱坞星光大道留手印 成内地导李克强:中德交流合作给双方带来实实在俄罗斯期待格鲁吉亚新政权对俄友好“美丽中国”图片展在莫斯科举行英国遭遇“飓风级”风暴 已造成至少两美国工业生产9月环比增长0.6%空客呼吁采用经济舱座椅宽度新标准部分城市难完成房价控制目标 四季度楼大学教授称北京房价会涨到每平方米80西藏旅游大巴坠崖 44人遇难“超级月亮”凌晨上演主角缺席斯诺克大师赛进行首轮比赛才露庐山真面目前度围挡今又来2014年08月11日葛老师文综/语文再圆5人清华、北大梦美军轮番空袭伊武装分子防止孩子坠井有多难?连续3次增雨“赶跑”重旱东明路跨东风渠桥8月中旬通车参与莎车县暴恐案的18名犯罪嫌疑人自孽仙缘最强天与天宇大凡天至尊焚神超能师超级搜美仪都市混元戒珠光宝气天山牧场神役世界红木棉之浴火49圣堂旅游倪宅旅游中国纽扣博物馆旅游醉园旅游贵州民族民俗博物馆旅游磁悬浮列车旅游南庄山芙蓉咖啡艺廊旅游国立传统艺术中心旅游荔湾博物馆旅游迪庆藏族自治州民族博物馆旅游虞山旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘