在VB中如何用API监控鼠标和键盘

来源:互联网 发布:淘宝下架的宝贝找不到 编辑:程序博客网 时间:2024/05/05 20:48

在VB中如何用API监控鼠标和键盘
本例中的钩子用来监视并记录应用程序中的按键信息。在程序中,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所说,对于鼠标和键盘,分别对应一个底层钩子。 

原创粉丝点击