我想把右键点击驱动器时,系统默认的右键菜单中的“格式化”项disable掉。
  我用的是Icontextmenu接口,在其中QuaryContextMenu中用
::EnableMenuItem(hMenu,30755,MF_DISABLED|MF_GRAYED);
::EnableMenuItem(hMenu,45,MF_DISABLED|MF_GRAYED);
  就可以成功的把2000 Professional下,资源管理器中右边用户区的格式化菜单(用spy++读出id值是30755)和左边树状菜单中的格式化菜单(用spy++读出id值是45)。
  
   但是我发现这个方法很局限,因为如果换了操作系统,如xp,用spy++读出的菜单的id值就变了,而且左边树状菜单的id值还是每次不一样的(直接用光盘装的xp和用ghost装的xp左树菜单的id值不一样)。   现在的问题就是如何才能解决这个不同os的问题。我的想法是找出这些id值的define定义吧,就好像“关闭”的定义是ID_FILE_CLOSE。但是未果。或者有什么其它解决方法的。
   
   那位高手知道如何解决这个难题的,它困扰了我好久了!不胜感激!

解决方案 »

  1.   

    int GetMenuString(          HMENU hMenu,
        UINT uIDItem,
        LPTSTR lpString,
        int nMaxCount,
        UINT uFlag
    );遍历各个MenuItem,然后判断它的文本是否是格式化,是的话就进行处理啦,不是的话pass!
      

  2.   

    我试了一下,但是不知道如何遍历各个MenuItem呀,在QuaryContextMenu(hmenu,indexmenu,idcmdfirst,idcmdlast,nflags);中
    在xp下,indexmenu=0,idcmdfirst=31030,idcmdlast=31226,而我要找的格式化,右边用户区是31012,左边树状里是45,
    而在GetMenuString里一定要有uIDItem才能找到string的,我应该如何做呀。
      

  3.   

    试下getmenuitemcount,在根据position查menustring,即可。
      

  4.   

    错了,得到count值后,再getmenuitemid,再用id和bycommand的flag来找string,就可以了。