SetWindowsHookEx第二个参数,是调用钩子函数,钩子函数的格式
Public Function MyKBHook(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
有三个参数,第一个是类型,我看别人写if ncode=0 则发生指定事件
第二个是指定钩子钩什么事件,比如If wParam = WM_KEYDOWN Then 这个只能判断键盘的弹起按下事件
我想要让钩子可以具体判断我按的是哪个键就要用到第三个参数。但是!!!!!!!
百度翻烂 到头来就是那么一句话
什么lParam写成2进制就是 00000000 00000000 00000000 00000000   0-15位表示....16-23位表示.....
我想知道的是这个参数到底应该怎么用????比如我要把A变成B
应该怎么设置?给lParam一个什么值??

解决方案 »

  1.   

    [code=VB]
    Dim p As KEYMSGS
    If Code = HC_ACTION Then
        If wParam = WM_KEYUP Or wParam = WM_SYSKEYUP Then
            CopyMemory p, ByVal lParam, Len(p)
            Debug.Print p.vKey, p.sKey
        end if
    end if
      

  2.   

    2楼:
    我有个问题 这个CopyMemory 是怎么进行copy的?
    我自己先试着 随便定义了一个 数据类型   里面有A,B,C,D,E然后又定义了个 变量X 值是123456 我试着用CopyMemory看看能得到什么 结果只有A是123456 BCDE都是0   又把X弄成字符串 结果有2个 里面有值 其中一个 还会一直变    这是怎么回事? CopyMemory到底是怎么copy的?和我们正常copy一样吗?就是 我复制个B 粘贴到A后面就是AB。但是他好像和正常复制粘贴不是一码事啊?   就算copy的内存   也应该是 把源地址copy到目标地址吧。难道是我想错了?那他的copy过程又是什么呢????
      

  3.   

    Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
      

  4.   

    http://download.csdn.net/source/1860777
      

  5.   

    比如我要把A变成B
    //
    全局的么?用_LL的HOOK吧:封装了一个键盘鼠标HOOK类,使用方便(VB6.0)
      

  6.   

    呵呵,没看清楚,把A变成A就把A吃掉,再发送个键盘B
      

  7.   

     lParam 指向一个结构的地址
    用copymemery应该是把该地址的整个结构体都考过来了你去查一下这个结构的具体定义,因为结构体不同,拷贝的结果不同
      

  8.   

    3楼:
    我的理解是这样的:
    比如c的结构体(就是vb的自定义数据)
    struct ssss
    {
    int a;
    int b;
    int c;
    }那么你只有把这个结构体指向一个2*3字节的地址区域(2字节就是整形的长度-我没记错把,3指的是你的结构体有3个int组成)才可以复制正确你举的例子中你把一个123456放在若干个(就你的数据类型而定)字节中
    但是你把结构体指向了123456的地址中,明显结构体的内存长度大于123456的内存长度,那么只有结构体的第一个数据被写入,其他几个都是空的参考:
    http://baike.baidu.com/view/1534200.htm