TPYI123 2024-01-31 12:01 采纳率: 88.5%
浏览 17
已结题

通过钩子获取右键菜单栏按钮ID这个为什么不行呢

通过钩子获取右键菜单栏按钮ID这个为什么不行呢

img


LRESULT CALLBACK  MouseProcEx(int nCode, WPARAM wParam, LPARAM lParam)
{

    if (nCode < 0)
        return CallNextHookEx(g_hHook, nCode, wParam, lParam);

    PMOUSEHOOKSTRUCT pInfo = (PMOUSEHOOKSTRUCT)lParam;

    if (nCode == HC_ACTION && wParam == WM_RBUTTONDOWN) {
        // 当右键按下时处理
        HMENU hMenu = NULL;
        hMenu = GetMenu((HWND)lParam); // 获取菜单句柄
        if (hMenu != NULL) {
            int count = GetMenuItemCount(hMenu);
            for (int i = 0; i < count; i++) {
                MENUITEMINFO info;
                ZeroMemory(&info, sizeof(info));
                info.cbSize = sizeof(info);
                info.fMask = MIIM_TYPE | MIIM_SUBMENU;
                if (GetMenuItemInfo(hMenu, i, TRUE, &info)) {
                    if (info.hSubMenu == NULL) {
                        // 这是一个普通的菜单项
                        int itemID = info.wID;
                        WCHAR buf2[60] = { 0 };
                        wsprintf(buf2, L"hookapp 普通的菜单项(%d)", itemID);
                        OutputDebugString(buf2);
                    }
                    else {
                        // 这是一个子菜单,需要递归处理
                        int subMenuCount = GetMenuItemCount(info.hSubMenu);
                        for (int j = 0; j < subMenuCount; j++) {
                            MENUITEMINFO subInfo;
                            ZeroMemory(&subInfo, sizeof(subInfo));
                            subInfo.cbSize = sizeof(subInfo);
                            subInfo.fMask = MIIM_TYPE | MIIM_SUBMENU;
                            if (GetMenuItemInfo(info.hSubMenu, j, TRUE, &subInfo)) {
                                if (subInfo.hSubMenu == NULL) {
                                    int subItemID = subInfo.wID;
                                    WCHAR buf2[60] = { 0 };
                                    wsprintf(buf2, L"hookapp 子菜单项(%d)", subItemID);
                                    OutputDebugString(buf2);                                    
                                }
                                else {
                                    // 递归处理子菜单项
                                    // ...
                                }
                            }
                        }
                    }
                }
            }
        }
        else{
            OutputDebugString(L"hookapp NOMenu)");
        }
            
        
    }
    
    return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}

  • 写回答

17条回答 默认 最新

  • 急速光粒 2024-02-01 06:35
    关注

    获取方式有问题,代码发全了看下。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(16条)

报告相同问题?

问题事件

  • 系统已结题 2月14日
  • 已采纳回答 2月6日
  • 修改了问题 1月31日
  • 创建了问题 1月31日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。