转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
Visual Basic中实现I/O端口控制         ★★★★

Visual Basic中实现I/O端口控制

作者:闵涛 文章来源:闵涛的学习笔记 点击数:790 更新时间:2009/4/23 14:59:42
  VB没有提供直接读写I/O口的方法。所以只能借助其他语言来编写DLL,然后再在VB中调用。如果要在Windows 3.X下读写端口,也可以下载ftp://ftp.winsite.com/pub/pc/win31/programr/vbasic/portz10.zip,它是一个免费的VBX,可以通过读写VBX的属性来实现读写端口的操作,十分方便。

  如果你在Windows下使用过C/C++,那么编写这样的DLL可能没有什么困难。在C语言里都包括inp和outp函数。可以把下面这段C语言代码(32位)编译生成DLL,然后在VB中调用。

#include
#include
/*作用:从指定端口读入一个字节
参数:portid端口号
返回值:读入的字节*/
int _stdcall Inport(short portid)
{
 return inp(portid);}
 /*作用:向指定端口写入一个字节
 参数:portid端口号*/
 void _stdcall output(short portid,short byte)
 {
  outp(portid,byte);
 }
 /*作用:从指定端口读入一个字节
 参数:portid端口号
 返回值:读入的字节*/
 int _stdcall Inportw(short portid)
 {
  return inpw(portid);}
  /*作用:向指定端口写入一个字节
   参数:portid端口号*/
  void _stdcall Outportw(short portid,short word)
  {
   outpw(portid,(unsigned short) word);
  }
  注意:这种方法只能用于Windows 95/98,不能用于Windows NT。

  VB6.0中DRAGDROP事件与DRAGOVER事件的使用

  在WINDOWS中,拖动意味着移动光标到对象上,按住鼠标,接着移动鼠标使对象在屏幕内滑动以重新定位对象。当释放鼠标按钮时,在拖动对象所在控件边界内放开鼠标会触发DragDrop事件。如果放开鼠标时对象不在一个控件的上面,那么对象定位于窗体本身。

  拖动对象的DragDrop事件不是用来存放有关放开对象时执行某些指令的地方。而应将这些指令放到背景的DragDrop事件中或者拖动对象所放开的目标控件中。

  一个DragDrop事件提供三条信息--DragDrop(Source as Control,X as Single,Y as Single)Source,是已经放开的图片,图标或控件。X和Y值,是放开事件所在目表对象的水平和垂直方向位置。如:

Sub pictrue1-DragDrop(Source as Control,X as Single,Y as Single)
Pictrue1.DrawWidth=6
picture1.pset(x,y),QBcolor(4)
End Sub
  当一个控件拖动到另一个之上时,发生一个DragOver事件,以警告被入侵的控件或窗体发生了拖动。一个DragOver事件提供四条信息:

DragOver(Source as conterol,X as Single,Y as Single,State as Integer)
  "Source"为入侵者标志。入侵者在被入侵的控件或窗体内的当前位置由X,Y来确定入侵者的状态,如是否刚刚进入。仍在其内或将要离开等由State变量报告。

  通过允许用户拖动一个指针在屏幕上移动,接触窗口内的不同区域引起事情发生。一种常用的编程技术是和一状态栏一同使用。状态栏随程序运行时的情况而改变,报告光标的当前位置,变量如Font等的状态,提供一种有效的帮助功能。

  如何判断某一个Drive是否为光碟机?

  须调用 Windows API 的 GetDriveType ,首先 声 明 以 下 API :

Declare Function GetDriveType Lib "kernel32" Alias _
"GetDriveTypeA" (ByVal nDrive As String) As Long
  然后将以上的声明放在.bas的一般模块中,如果放在 Form 之中, 须在Declare之前再加上 Private。 然后使用以下叙述调用 :

  ret = GetDriveType ( "D:\")

  若传回值 ret 等于 5 , 即表示 "D:\" 为光碟机 , 至于其他传回值的意义则是 :

  2:软碟, 3:硬碟, 4:Server端磁碟, 6:RAMDISK。

  如何过滤键盘录入

  在 VB 的应用得到以前就处理键盘动作, 实现对键盘的全面控制, 可过滤任意的键。 下面的例子过滤了 CTRL+C 键, 并把该键模拟为在 Command1 上单击。

Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long

Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long

Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Const WH_KEYBOARD = 2
Public Const KBH_MASK = &H20000000
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Global hHook As Long
'KeyboardProc 在 VB 应用动作前发生
Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 If nCode >= 0 Then
  '处理你希望过滤的键
  If wParam = Asc("C") And (lParam And KBH_MASK) <> 0 Then
   If (lParam And &HC0000000) = 0 Then
    '模拟在Command1 中单击
    Form1.Command1.SetFocus
    Call PostMessage(Form1.Command1.hwnd, WM_LBUTTONDOWN, 0, &H20002)
    Call PostMessage(Form1.Command1.hwnd, WM_LBUTTONUP, 0, &H20002)
    KeyboardProc = 1
    Exit Function
   End If
  End If
 End If
 KeyboardProc = CallNextHookEx(hHook, nCode, wParam, lParam)
End Function
 
Private Sub Form_Load()
 '将 KeyboardProc 连接到中断上
 hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, 0&, App.ThreadID)
End Sub

Private Sub Form_Unload(Cancel As Integer)
 Call UnhookWindowsHookEx(hHook)
End Sub  


[系统软件]Visual Studio 2005 Express Beta Products 下载链…  [系统软件]Visual FoxPro9.0中扩展报表系统功能
[系统软件]Visual FoxPro:我是旁观者  [系统软件]Visual Studio 2005 Express Editions Beta 2 下载…
[系统软件]Boost库在XP+Visual C++.net中的安装  [系统软件]Visual Studio 2005 Express Edition 正式版下载地…
[常用软件]Visual Foxpro通用报表打印程序  [常用软件]Visual FoxPro 6.0与大型数据库的无数据源连接
[常用软件]Visual Foxpro 的一个BUG  [VB.NET程序]Visual Basic 6 逆向工程与反逆向工程 (2)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台