难! 系统默认的右键菜单屏蔽问题!!急求!
我想把右键点击驱动器时,系统默认的右键菜单中的“格式化”项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。但是未果。或者有什么其它解决方法的。
那位高手知道如何解决这个难题的,它困扰了我好久了!不胜感激!
问题点数:30、回复次数:8Top
1 楼wangcx(我侵蚀着孤独)回复于 2004-12-02 10:15:31 得分 15
int GetMenuString( HMENU hMenu,
UINT uIDItem,
LPTSTR lpString,
int nMaxCount,
UINT uFlag
);
遍历各个MenuItem,然后判断它的文本是否是格式化,是的话就进行处理啦,不是的话pass!Top
2 楼enetlily(兰百合)回复于 2004-12-02 10:27:09 得分 0
我去试试看先,谢谢啦。Top
3 楼ecyclone(无影雪)回复于 2004-12-02 10:38:31 得分 0
我试了一下,但是不知道如何遍历各个MenuItem呀,
在QuaryContextMenu(hmenu,indexmenu,idcmdfirst,idcmdlast,nflags);中
在xp下,indexmenu=0,idcmdfirst=31030,idcmdlast=31226,而我要找的格式化,右边用户区是31012,左边树状里是45,
而在GetMenuString里一定要有uIDItem才能找到string的,我应该如何做呀。Top
4 楼enetlily(兰百合)回复于 2004-12-02 11:01:45 得分 0
试下getmenuitemcount,在根据position查menustring,即可。Top
5 楼enetlily(兰百合)回复于 2004-12-02 11:37:46 得分 15
错了,得到count值后,再getmenuitemid,再用id和bycommand的flag来找string,就可以了。Top
6 楼ecyclone(无影雪)回复于 2004-12-02 11:38:39 得分 0
ok,问题解决了!Top
7 楼celerityok(敏行)回复于 2004-12-21 23:05:41 得分 0
mark!Top
8 楼ChenLiuqing(没有心的鸟^_^(★★★★★))回复于 2005-07-04 18:14:22 得分 0
markTop




