VB对低层硬件的访问控制

【信息科学与工程学】【运营科学】第二篇 C4信息与通信网络运营 (C4) ——数据中心网络运营06 13 | 司法诉讼 | 原告律师 | 争取和解优势 | 证据披露的序贯博弈 | 策略性证据释放 | 持有证据集E = {强证据e_s, 中证据e_m, 弱证据e_w}。设公众原有认知人格向量为 Pold​​=(p1​,p2​,...,pk​), 其中p_i为负面特质(如“不敬业”)。危机后, 通过行为序列 {At​}和宣传, 将公众认知向新向量 Pnew​​引导, 使得在关键维度上, Pnew​​与 Pold​​的余弦相似度降低, 并与一个正面的、可接受的“原型”(如“浪子回头”、“慈父”)对齐。 阅读详情
---- 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对低层硬件的访问控制... 精彩编程与编程技巧-VB对低层硬件的访问控制 ... 立即下载

相关推荐

vb 6.0并口开发操作实例

vb6并口开发,简体中文,试例 内有inpout32.dll动态链接库

启动应用程序出现mprmsg.dll找不到问题解决

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个mprmsg.dll文件(挑选合适的版本文件)把它放入到程序或系统目录中,当我们执行某一个.exe程序时,相应的DLL文件就会被调用,因此将缺失的文件放回到原目录之后就能打开你的软件或游戏了.那么出现mprmsg.dll丢失要怎么解决?

wbcmbfy的博客 3207

VB6 通过shell32.dll调用显示Windows控制面板各个模块.rar

VB调用显示Windows控制面板各个模块,也就是vb操作控制面板,把Windows控制面板中的内容全部显示在本程序的窗口中,像键盘设置、区域设置、网络、显示、多媒体等各个模块的显示。本例中主要是通过rundll32.exe shell32.dll来调用各个控制模块,将ICO图标编号,然后使用esle if结构逐一判断用户点击了哪个图标,图标对应于shell32.dll的调用,比如下面是其中一些模块的调用方法:   Private Sub Icon_Click(Index As Integer)   If Index = 0 Then    Call ControlPanels("rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1")   ElseIf Index = 1 Then    Call ControlPanels("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1")   ElseIf Index = 2 Then    Call ControlPanels("rundll32.exe shell32.dll,Control_RunDLL timedate.cpl")   ElseIf

【亲测免费】 推荐开源项目:libio - 现代化、高性能的I/O库

推荐开源项目:libio - 现代化、高性能的I/O库 项目简介 是一个现代化的、跨平台的C++ I/O库,旨在提供高效、易用和线程安全的文件操作接口。该项目的目标是简化C++中的输入/输出操作,为开发者带来更流畅的编程体验。 技术分析 libio的核心特点是基于C++17标准,并利用了现代C++的一些特性如范围for循环、std::shared_ptr等,提高了代码的可读性和安全性。它的设计原则...

gitblog_00051的博客 2687

dllio32.rar

dllio32.rar

TwinCAT3入门教程3——PLC程序变量定义和硬件IO关联

目录 1、IO输入输出变量定义和硬件关联 1.1 IO输入 1.2 IO输出 1.3 PLC变量和IO模块关联 1.4 测试IO输出点 2、伺服变量关联 1、IO输入输出变量定义和硬件关联 1.1 IO输入 添加全局变量IO_Global 变量定义 (*==========================================IO输入===============================================================*)

panjinliang066333的博客 1万+

VB对低层硬件访问控制

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

石头的专栏 1071

STM32F103C8T6 Bootloader开发实战:串口IAP固件升级与Keil工程配置详解

本文详细介绍了STM32F103C8T6 Bootloader开发实战,重点讲解串口IAP固件升级的实现方法与Keil uVision5工程配置。通过Flash分区管理、USART1通信协议设计及应用程序跳转机制等核心技术,帮助开发者掌握嵌入式系统固件升级方案,提升设备维护效率。

weixin_29165725的博客 436

JavaSE『学习笔记』

本教程以 JDK8 为主,新版本与新特性以介绍与使用为辅。

小哞^同^学的技术博客 1236

从零构建智能监控系统:ZLMediaKit与SpringBoot的RTSP流处理实战

本文详细介绍了如何从零构建智能监控系统,结合ZLMediaKit与SpringBoot实现RTSP流处理。通过多协议支持、高性能架构设计及工业级部署优化,解决传统监控方案的兼容性差、延迟高等问题,适用于物联网和智能安防领域。

weixin_29002209的博客 370

Vivado新手避坑指南:搞懂Generate Output Products和Create HDL Wrapper到底在干啥

本文深入解析Vivado设计流程中的Generate Output Products和Create HDL Wrapper两大关键步骤,帮助新手理解其核心功能与操作要点。通过详细讲解文件生成类型、关键选项设置及常见问题解决方案,指导开发者正确使用这两个功能,避免设计流程中的常见错误,提高FPGA开发效率。

weixin_29207149的博客 309

windows 访问控制模型(二)之安全描述符

安全对象Securable Object是拥有SD的Windows的对象。 所有的被命名的Windows的对象都是安全对象。一些没有命名的对象是安全对象,如:进程和线程,也有安全描述符SD。安全对象Securable Object是拥有SD的Windows的对象。 在 Windows系统中,其是用一个安全描述符(Security Descriptors)的结构来保存其权限的设置信息,简称为SD

ShadowAssassin的专栏 6004

避坑指南:Xilinx SelectIO IP核官方例程里那些容易忽略的细节(复位、时钟与数据回环)

本文深入解析Xilinx SelectIO IP核设计中复位策略、时钟域交互和数据回环验证三大关键领域的实战避坑技巧。针对官方例程中易被忽视的细节,如复位同步链深度、时钟相位约束和数据对齐机制,提供经过项目验证的优化方案,帮助工程师节省80%以上的调试时间。特别适用于FPGA开发中高速接口设计场景。

weixin_42561476的博客 447

Active Directory中的访问控制

以下内容摘自笔者编著的《网管员必读——网络管理》(第2版)一书。   6.1.4  Active Directory中的访问控制 为达到安全目的,管理员可使用访问控制来管理对共享资源的用户访问权。在Active Directory中,访问控制是通过为对象设置不同的访问级别或权限(如“完全控制”、“写入”、“读取”或“拒绝访问”),在对象级别进行管理的。Active Directory 中的访...

weixin_34072857的博客 293

智能驾驶域控(ADCU)方案介绍

本文主要对智能驾驶域控(ADCU)方案相关知识进行总结,以加深理解,及方便后续查漏补缺。

liuxu324的博客 1572

iStoreOS等软路由插件卸载的残留?分享一款软路由高级卸载工具,自定义卸载,轻松解决卸载残留问题

iStoreOS用户看过来!👀 还在被插件包残留困扰吗?本文分享一款“高级卸载”的插件,助你深度清理iStoreOS系统,彻底解决软件卸载不净的痛点,告别频繁恢复出厂设置的烦恼!🚀

XiaoqiangClub的博客 1537

windows Access Token 、ACL、ACE学习笔记

今日看了看关于windows本身安全机制的一些文章,所以将自己掌握到的一些东西供大家探讨一下。   1. Access Token   windows访问令牌记录着某用户的SID、组ID、Session、及权限等信息,要获取这些信息,可以通过GetTokenInformation API获得。以下是一些代码样例 #define GETATTRI(desc, attri, check) \

xbgprogrammer的专栏 7886

ESP32-C3蓝牙透传通信的BLE协议栈工程实践

蓝牙低功耗(BLE)透传是一种基于GATT服务模型的数据透明传输机制,其核心原理在于Peripheral设备通过广播建立连接,并在GATT Server层暴露可读写特征值实现双向数据通道。该技术具备低功耗、跨平台兼容性强、开发门槛适中等优势,广泛应用于智能硬件、工业传感器与嵌入式网关等场景。在实际工程中,透传稳定性高度依赖BLE协议栈的分层协同——Link Layer负责可靠连接建立,GATT Server则定义数据交互语义;而ESP32-C3的AT指令集正是对这两层能力的封装调度。本文聚焦BLE透传的关键

weixin_29859471的博客 121

网卡的序列号

调用EthernetAddress(0),该函数返回的字符串就是您机器上网卡的以太序列号。Private Const NCBASTAT = &H33 Private Const NCBNAMSZ = 16 Private Const HEAP_ZERO_MEMORY = &H8 Private Const HEAP_GENERATE_EXCEPTIONS = &H4 Private Const

易吉的Blog 2387

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: VB将OCX植入执行文件内
下一篇: VB环境下Video/Audio压缩数据流播放技术
ejay
博客等级 码龄24年 3粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值