(C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令

本文介绍了如何在C#中使用Windows Shell编程,特别是通过IContextMenu接口不弹出菜单直接调用命令。通过示例展示了如何调用GetUIObjectOf获取PIDL,并通过InvokeCommand执行"属性"命令。作者讨论了可能的下一步,即探讨图标或继续深入iContextMenu的话题。
摘要由CSDN通过智能技术生成
(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~)

接上一节: (C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单

上一节说到如何弹出 IShellFolder 的上下文菜单,也就是 IContextMenu。有时候我们需要在这个菜单上面,加入一些属于自己的菜单项。举个例子,你打开资源管理器,查看左边目录树的右键菜单,会发现顶层多了一个折叠/展开的菜单项。好,我们也动手来加入这个菜单项。

修改例子3,我们找到 QueryContextMenu 处,这时候提供了一个菜单句柄:

// 提供一个弹出式菜单的句柄
IntPtr contextMenu  =  API.CreatePopupMenu();
iContextMenu.QueryContextMenu(contextMenu, 
0 ,
    API.CMD_FIRST, API.CMD_LAST, CMF.NORMAL 
|  CMF.EXPLORE);

然后增加以下代码:

/增加一个自定义菜单
string  topInvoke  =  Tree1.SelectedNode.IsExpanded  ?   " 折叠(&A) "  :  " 展开(&A) " ;
MFT extraFlag 
=  (Tree1.SelectedNode.Nodes.Count  >   0 ?   0  : MFT.GRAYED;
API.InsertMenu(contextMenu, 
0 , MFT.BYPOSITION  |  extraFlag,
    (
int )(API.CMD_LAST + 1 ), topInvoke);
// 增加分隔线
API.InsertMenu(contextMenu,  1 , MFT.BYPOSITION
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值