注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

零售创新,创新那些事儿,SPSS,VBA

零售创新

 
 
 

日志

 
 
关于我

新浪微博,零售创新 研究经理,数据分析师 希望和市场研究和零售业的同事共同进步! 本博客发表的都是免费或试用的资料,如果有版权问题请发邮件wangli12a@163.com联系删除。 spss excel vba blog

网易考拉推荐

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

2007-07-05 11:20:41|  分类: VB和VBA知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在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所说,对于鼠标和键盘,分别对应一个底层钩子。

 
  评论这张
 
阅读(2286)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017