无法建立全局Hook
全局Hook必须放到DLL中。
但据说VB通过特殊办法可以生成符合要求的DLL,但我没实验过,不敢说。

解决方案 »

  1.   

    在VB里用 "addressof 过程/函数(模块级)"在把VB里的函数的地址传递给VC,让DLL callback可以马?
      

  2.   

    我试过,但在VC中可能声明VB中的函数指针不正确,运行后在函数执行一次就会发生可恶的非法操作的提示信息框。
      

  3.   

    如有那一位大侠完成这个Mission,请EMAIL一份源程序给我,让认真我研究一下,我的EMAIL地址是[email protected]
      

  4.   

    我也要
    [email protected]
      

  5.   

    对了,如果只是想得到键盘和鼠标的消息,那么不必那么麻烦,还有别的办法:WH_JOURNALRECORD
    这个就够了
      

  6.   

    全局钩子 
    http://www.easthot.net/HotForum/topic.asp?topic_id=618&forum_id=1&Topic_Title=%C8%AB%BE%D6%B9%B3%D7%D3&forum_title=Visual+Basic&M=False&S=TrueBardo 写的 :)
      

  7.   

    谢谢,那文档我看了,不是实现全局鼠标钩子的,只是对一个窗体进行子类处理,我说的全局鼠标钩子是使用SetWindowsHook函数在DLL中实现的情况,那样可以接收系统内所有的鼠标消息,如包括你点任务栏的消息也可在VB中处理。全局鼠标钩子我已经实现了,如有人要源代码可以发email到[email protected]索取。我正在研究各种钩子的使用,如对钩子有研究不妨可以在此讨论一下.
      

  8.   

    以下测试代码通过测试,
    作用是,在VC中调用VB中的函数,
    DLL的名称为:test.dll
    VC++的源代码:
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     )
    {
        switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
    break;
        }
        return TRUE;
    }long ( __stdcall *ptest1)(long n);long __stdcall test1(long n)
    {
    ptest1 = (long (__stdcall  *)(long))n;
    (*ptest1)(2);
    return n+1;
    }在VB中:
    把以下代码放在模块中
    Public Function testCallBack(ByVal param As Long) As Long
    MsgBox param
    testCallBack = 0
    End Function'把以下代码放在FORM中
    Private Declare Function test1 Lib "test.dll" (ByVal n As Long) As Long
    Private Sub Command1_Click()
    MsgBox test1(AddressOf testCallBack)End Sub