VB对低层硬件访问控制

2016-02-19 18:28 11 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐VB对低层硬件访问控制,无聊中的都看过来。

【 tulaoshi.com - 编程语言 】

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

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

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


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

  程序清单:

OptionExplicit
  PrivateDeclareSubAnjanLib
  “vbio.dll"()
  PrivateDeclareFunctionInpLib
  “vbio.dll"(ByValport&)AsInteger
  PrivateDeclareFunctionInpwLib
  “vbio.dll"(ByValport&)AsLong
  PrivateDeclareSubOutLib
  “vbio.dll"(ByValport&,ByValbyt%)
  PrivateDeclareSubOutwLib
  “vbio.dll"(ByValport&,ByValwrd&)
  PrivateDeclareFunctionGetLptBaseAddrLib
  “vbio.dll"(ByVallpt&)AsInteger
  PrivateDeclareFunctionGetComBaseAddrLib
  “vbio.dll"(ByValcom&)AsInteger

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

PublicSubSetFreq(soundHzAsInteger)设置频率
  IfsoundHzThen
  DimdivisorAsLong
  divisor=1193180/soundHz计算时间常数
  Out&H42,&HB6
  8253-5通道2设置为方式3
  Out&H42,divisorMod256送时间常数
  Out&H42,divisor256
  SpeakerTrue
  Else
  SpeakerFalse
  EndIf
  EndSub

PublicSubSpeaker(sOnAsBoolean)开关声音
  DimportValAsInteger
  portVal=Inp(&H61)
  IfsOnThen
  portVal=portVr3
  低位为通道2的门控信号
  Else次低位为整形与门控制信号
  portVal=portValAnd(Not3)
  EndIf
  Out&H61,portVal
  
  EndSub

PrivateSubForm_Load()
  Anjan软件解锁
  EndSub

PrivateSubSoundOff_Click()
  SpeakerFalse
  EndSub

PrivateSubSoundOn_Click()
  SetFreqVal(TextHz)
  EndSub

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)


  二、利用ActiveX处理硬件中断


  在应用程序中如果需要访问存储单元、端口以及处理硬件中断,使用TVicHW32ActiveX控件是一很好的选择,该控件是一个共享软件,支持Windows95/98/NT,可从http://www.entechtaiwan.com/tools.htm处下载。该控件除具备直接访问存储单元和端口的功能外,还提供了丰富的处理并口的属性和方法,以及处理硬件中断的属性、方法和事件,极大地拓展了VB对低层硬件的访问控制。下面通过一个显示键盘中断次数和按键扫描码的示例介绍控件的使用过程。
  下载TVicHW32压缩软件包并解压到一个目录中,如HW。把driver子目录下的vichw00.vxd文件拷贝到windowssystem子目录下,该文件是控件访问硬件的驱动程序,使用控件前先用OpenDriver打开,最后用Close_Driver方法关闭。
  把ocx子目录下的tvichw32.ocx拷贝到windowssystem子目录下,并在DOS命令行状态下键入以下命令进行注册:
  regsvr32tvichw32.ocx
  在VB环境下通过菜单工程--部件--控件并选择TVicHW32ActiveXControlModule将控件添加到工具箱中。
  相关的属性、方法及事件
  方法OpenDriver打开支持访问硬件
  的驱动程序vichw.vxd(windows95下)
  方法CloseDriver关闭驱动程序
  属性ActiveHWAsBool驱动程序打开
  则为True;关闭为False
  中断事件OnHwInterrupt(ByValHwCounterAsLong,
  ByValLPT_DataRegAsInteger,
  ByValLPT_StatusRegAsInteger,
  ByValScanCodeAsInteger
  )
  参数
   HwCounter:中断次数
  LPT_DataReg:如果使用IRQ7,
  则为打印并口的数据
  LPT_StatusReg:如果使用IRQ7,
  则为打印并口的数据
  ScanKode:如果使用IRQ1,
  则为按键的扫描码
  属性IRQNumber指定中断号,
  范围IRQ1--15
  属性IRQMasked中断非屏蔽则为True;
  屏蔽为False。


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

  程序清单:

PublicSubShowButtons()
  Open_Driver.Enabled=NotHwCtrl.ActiveHW
  Close_Driver.Enabled=HwCtrl.ActiveHW
  B_Unmask.Enabled=HwCtrl.ActiveHW
  EndSub

PrivateSubForm_Load()
  ShowButtons
  EndSub

PrivateSubOpen_Driver_Click()
  HwCtrl.OpenDriver打开驱动程序
  IfNotHwCtrl.ActiveHWThen
  MsgBox(“ThedriverVICHWxxnotfound")
  Else:
  HwCtrl.IRQNumber=1中断号为1,键盘中断
  EndIf
  ShowButtons
  EndSub

PrivateSubClose_Driver_Click()
  HwCtrl.CloseDriver关闭驱动程序
  B_Unmask.Value=0
  ShowButtons
  EndSub

PrivateSubB_Unmask_Click()
  IfB_Unmask.Value=0Then
  HwCtrl.IRQMasked=True
  Else
  EndSub

->

来源:http://www.tulaoshi.com/n/20160219/1617826.html

延伸阅读
第一部分:得到Winamp的窗口 Winamp是一个32位的Windows应用程序。也就是说,我们可以使用32位的Windows编程的一些基础技术来实现控制Winamp,即使用Windows的消息系统。在你给Winamp发送消息之前,你必须得到Winamp窗口的句柄。这里有个方法,使用外部应用程序(例如你自己编写的VB应用)就可以达到要求。 Public Declare Functi...
VB没有提供直接读写I/O口的方法。所以只能借助其他语言来编写DLL,然后在VB中调用。  如果你在Windows下使用过C/C++,那么编写这样的DLL可能没有什么困难。在C语言里都包括inp和outp函数。可以把下面这段C语言代码(32位)编译生成DLL,然后在VB中调用。  代码如下:  #include #include /*作用...
标签: vb
可能有许多跟我一样用小猫上网的朋友都有过这样的烦恼,那就是每个月不得不面对的超额上网费用,特别是对于我们这种穷学生和工薪阶层的人来说。为了改变这种现状,我便用VB编了一个控制上网时间的小软件,其实原理很简单,就是根据自己设置的时间自动连通网络和强制切断网络。好了,废话少说,那就让我们开始吧。 一、添加控件并修...
Visual Basic对Access数据库的集成非常紧密,通常由以下几个部分组成。 引用DAO类型库 1、从“工程”菜单中选择“引用”菜单项; 2、在可引用列表框中选择“Microsoft DAO 3.51 Object Library”项。 3、最后“确定”即可 设置DAO数据类型变量 DAO数据类型变量共分成两种: 1、Database变量 ...
摘要 本文讨论了VisualBasic应用程序访问SQLServer数据的几中常用的方法,分别说明了每种方法的内部机理并给出了每种方法的一个简单的实例,最后比较了每种方法的性能和优缺点。 引言 MicrosoftVisualBasic(简称VB)作为一种面向对象的可视化编程工具,具有简单易学的,灵活方便和易于扩充的特点。而且Microsoft为...

经验教程

336

收藏

17
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部