如何解析lParam参数
悬赏分:100 - 离问题结束还有 14 天 23 小时
// 钩子函数LRESULT CALLBACK __declspec(dllexport) __stdcallMyProc(int nCode, WPARAM wParam, LPARAM lParam){
// if(wParam == WM_MENUCHAR)
// {
CString strMsg;
strMsg.Format("wParam:%d, lParam:%d", wParam, lParam);
SetWindowText(hWnd, strMsg.c_str());
// MessageBox(NULL, strMsg.c_str(), "DLL_Msg", MB_OK);
// }return (CallNextHookEx(hHook, nCode, wParam, lParam));
}
这是个线程注入的钩子函数,现在目标程序是记事本,我对记事本操作,发现
wParam得到的总是1或3,只有lParam在不停的变化,但LParam是长长的一段数字,也不知道哪段代表什么,现在的功能是,只要有消息进来,就把消息显示在标题上,比如我现在想只在点菜单的时候,显示个MessageBox怎么做?

解决方案 »

  1.   

    查看点击菜单时,wParam,lParam有什么不同的值等,然后区分
      

  2.   

    大哥!!!……举个例子吧,比如,我点了“文件-》新建”
    它显示
    wParam:1, lParam:52471
    点“查看,状态栏”
    它显示wParam:1, lParam:52400
    当然,现在这两个数字是随便写的,但实际运行就是这个样子的。前几位一样,后面几位变。
    你难道让我手动记住,点“查看,状态栏”的时候这个数字是多少,
    然后在下次编程的时候
    if(lParam == 52400)
    {
    AfxMessage("你点了查看,状态栏");
    }
    这样太傻了吧
      

  3.   

    lParam 给的是菜单项的 ID这些一般都是在 resource.h 里用 #define 给定的对于别人的程序,得到的就是一些数字
      

  4.   

    LPARAM这个类型一般是鼠标的坐标参数,高2位为X坐标,低2位为Y坐标。用用LOWORD,HIWORD函数可以解析lparam,获得X和Y坐标,不知道这样算不算你说的解析
      

  5.   

    WM_MENUCHAR    WPARAM wParam
        LPARAM lParam;
    ParameterswParam
    The low-order word specifies the character code that corresponds to the key the user pressed. 
    The high-order word specifies the active menu type. This parameter can be one of the following values. MF_POPUP
    A drop-down menu, submenu, or shortcut menu.
    MF_SYSMENU
    The window menu.
    lParam
    Handle to the active menu.
      

  6.   

    lParam 显示的是窗口的ID值
      

  7.   

    根据MSDN的解释 lParam 应该是子菜单的句柄,也就是应该是与 GetSubMenu 的返回值是一样。。
    不知道解释的对不对。。盼高手确定