程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 在VB中如何用API監控鼠標和鍵盤

在VB中如何用API監控鼠標和鍵盤

編輯:VB綜合教程
 

本例中的鉤子用來監視並記錄應用程序中的按鍵信息。
在程序中,ALT+F4組合鍵被屏蔽。下面是部分代碼:

Public hHook as Long
Private Sub Form_Load()′程序啟動時安裝鉤子
hHook=SetWindowsHookEx(2,Address of MyKBHook,0,App.ThreadID)
End Sub
′具體的鉤子程序,本例中該過程被包含在Module1中
Public Function MyKBHook(ByVal nCode As Long,ByVal wParam As Long,ByVal

lParam As Long)As Long
If nCode>=0 then
Open "C:\Keyfile.txt" For Append As #1 '將鍵盤的操作記錄在Keyfile.txt文件之中
'記錄所操作的鍵、操作時間、日期操作時的按鍵狀態,用16進制記錄
Write #1,wParam,Hex(lParam),Date,time
Close #1
MyKBHook=0 '表示要處理這個消息
'屏蔽ALT+F4組合鍵
if wParam=115 And(lParam And&H20000000)<>0 Then
if(lParam And &HC000000)=0 Then  '是否進行ALT+F4操作
MyHBHook=1 '鉤子吃掉這個消息
End if
End if
End if
Call CallNextHookEx(hHook,nCode,wParam,lParam)'將消息傳給下一個鉤子
End Function
'程序退出時卸載鉤子
Private Sub Form_Unload(Cancel As Interger)
Call Unhook WindowsHookEx(hHook)
End Sub
鼠標:
A:在Timer控件中不斷使用GetCursor取得鼠標的位置
B:使用Hook。
如果是鼠標鍵盤鉤子(WH_MOUSE),系統級的需要將回掉函數放在dll中,但VB不能寫普通dll(不

能是VB的ActiveX DLL),需要用其他編程工具寫(如VC++、Delphi、Borland C++ Builder)
如果是鼠標鍵盤鉤子(WH_MOUSE_LL),則本身就是系統級的,不需要dll,但只能在NT系統

(WinNT4/2000/XP/2003)下使用

鍵盤:
A:在Timer控件中不斷使用GetAsyncKeyState取得按鍵信息
B:使用Hook。
如果是普通鍵盤鉤子(WH_KEYBOARD),系統級的需要將回掉函數放在dll中,但VB不能寫普通dll(

不能是VB的ActiveX DLL),需要用其他編程工具寫(如VC++、Delphi、Borland C++ Builder)
如果是底層鍵盤鉤子(WH_KEYBOARD_LL),則本身就是系統級的,不需要dll,但只能在NT系統

(WinNT4/2000/XP/2003)下使用




GetCursorPos

VB聲明
Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As

POINTAPI) As Long
說明
獲取鼠標指針的當前位置
返回值
Long,非零表示成功,零表示失敗。會設置GetLastError
參數表
參數 類型及說明
lpPoint POINTAPI,隨同指針在屏幕像素坐標中的位置載入的一個結構




GetAsyncKeyState

VB聲明
Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal

vKey As Long) As Integer
說明
判斷函數調用時指定虛擬鍵的狀態
返回值
Long,自對GetAsyncKeyState函數的上一次調用以來,如鍵已被按過,則位0設為1;否則設為0。如鍵目前處

於按下狀態,則位15設為 1;如抬起,則為0。微軟的win32手冊指出:倘若輸入焦點從屬於與調用函數的輸入

線程不同的另一個輸入線程,則返回值為0(例如,一旦另一個程序擁有焦點,則它應返回零)。證據顯示,函

數實際是在整個系統的范圍內工作的
參數表
參數 類型及說明
vKey Long,欲測試的虛擬鍵的鍵碼
注解
如指定了VK_LBUTTON 或 VK_RBUTTON,按鈕的狀態就會根據實際的按鈕報告——無論是否曾用

SwapMouseButton函數對鼠標的位置進行了交換。win32提供了額外的一些虛擬鍵碼,比如VK_LSHIFT 和

VK_RSHIFT,以便在兩個完全一樣的鍵中區分出左右(也包括Ctrl 和 Alt)

標准的作法還是使用全局底層鉤子。
如zyl910所說,對於鼠標和鍵盤,分別對應一個底層鉤子。
 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved