如题,想用 API HOOK 获取当显示系统鼠标右键菜单的时候,怎样获取菜单项,并禁用其中的删除和粘贴两个项...

解决方案 »

  1.   

    http://hi.baidu.com/piaoliuxia/blog/item/9041e70955510e86d1581bc9.html
    这里有比较详细的HOOK解释
      

  2.   

    或者你自己重新编写一个鼠标右键的菜单
    应该是你自己的程序吧?那就自己编写一个没有“粘贴”和“删除”的菜单
    不过建议屏蔽掉delete和ctrl+V快捷键……
      

  3.   

    目前已经知道怎样屏蔽系统菜单中的关闭了,方法类型,但是还没有解决问题,现把代码发上来,请大侠帮帮我。unit u_menuhook;interfaceuses
      Windows, Messages;var
      hhk: HHOOK;  function HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
      function InstMenuHook: Boolean; stdcall; export;
      function UnInstMenuHook: Boolean; stdcall; export;implementationfunction HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
    var
      msg: PMsg;
      menu: HMENU;
    begin
      case nCode of
        MSGF_MENU:
        begin
          msg:= PMsg(lParam);
          if msg.hwnd <> 0 then
          begin
            menu:= GetSystemMenu(msg.hwnd, False);
            EnableMenuItem(menu, SC_CLOSE, MF_GRAYED);
          end;
        end;
      end;
      Result:= CallNextHookEx(hhk, nCode, wParam, lParam);
    end;function InstMenuHook: Boolean; stdcall; export;
    begin
      if hhk <> 0 then
      begin
        Result:= False;
        Exit;
      end;
      hhk:= SetWindowsHookEx(WH_SYSMSGFILTER, HookProc, HINSTANCE, 0);
      Result:= hhk <> 0;
    end;function UnInstMenuHook: Boolean; stdcall; export;
    begin
      if hhk <> 0 then
      begin
        UnhookWindowshookEx(hhk);
        hhk:= 0;
      end;
      Result:= hhk = 0;
    end;end.
      

  4.   

    或者哪位大侠知道Windows菜单中的删除和粘贴铵钮的 ID ,也请告知一下,好再有个思路找
      

  5.   

       HOOK TrackPopupMenu这个API函数,可以获取将要弹出的菜单的HMENU, 接下来用GetMenuItemCount获取菜单项目的数目,然后循环调用 GetMenuString,获取每个项目的文字,判断是否为删除和粘贴,如果是就EnableMenu