热情软件屋

 

怎样使用钩子函数


编号:QA000888
建立日期: 1999年4月30日 最后修改日期:1999年4月30日
所属类别:

翱翔一派:
    VB5
    win95
    设定消息钩子的API函数SetWindowsHookEx是怎样使用的及钩子函数应有什么样的界面?

回答:

    在Win32 API中有详细的关于钩子函数的介绍,如果你没有Win32 API,可以参考QA000150 "哪里能够找到WIN95 API的资料"
    Windows的钩子函数分两种,一种是全局的,一种是线程的。全局的钩子函数可以捕获任何应用程序的消息,但必须是标准的DLL才能实现,VB做不了。VB可以实现线程的,就是当前应用程序的消息,这对鼠标消息的捕捉有影响。
    SetWindowsHookEx定义如下:
    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
    idHook是钩子类型,如WH_KEYBOARD捕捉键盘消息,而WH_MOUSE捕捉鼠标消息。hmod用于全局钩子,VB要实现钩子,必须设为0。dwThreadId用于线程钩子VB中可以设置为App.ThreadID。lpfn为钩子函数,在VB中可以使用AddressOf获得钩子函数的地址。这个函数因为钩子类型不同而有所不同。如键盘钩子为:
    Public Function KeyboardProc(ByVal nCode As Long, _
     ByVal wParam As Long, _
     ByVal lParam As Long) As Long
    如果Code不为0,钩子函数必须调用CallNextHookEx,将消息传递给下面的钩子。wParam和lParam不是按键。
    你可以在微软的Knowledge Base的文章:“Q180936 OWTO: Position a MsgBox Using a Windows Hook Procedure”、微软的Knowledge Base的文章:“Q177992 OWTO: Intercept Keyboard Input from Visual Basic”和找到VB使用钩子函数的例子。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio