程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> Visual Basic中實現I/O端口

Visual Basic中實現I/O端口

編輯:VB綜合教程
如果你在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
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved