(C#)Windows Shell 外壳编程系列6 - 执行

简介: (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~)接上一节:(C#)Windows Shell 外壳编程系列5 - 获取图标 执行    许多人都知道 ShellExecute ,用于执行一个外部命令。

(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~)

接上一节:(C#)Windows Shell 外壳编程系列5 - 获取图标 

执行

    许多人都知道 ShellExecute ,用于执行一个外部命令。但对于  IShellFoloder 对象来说,它的执行命令,都在它的 ContextMenu 里面了。记得前几节说过如何直接调用 ContextMenu 里的项,因此,执行一个 IShellFoloder,也无非是调用它的 ContextMenu  里默认的项而已:

//存放 PIDL 的数组
IntPtr[] pidls = new IntPtr[1];
pidls[0] = pidl;

//得到 IContextMenu 接口
IntPtr iContextMenuPtr = IntPtr.Zero;
iContextMenuPtr = IParent.GetUIObjectOf(IntPtr.Zero, (uint)pidls.Length,
pidls, ref Guids.IID_IContextMenu, out iContextMenuPtr);
IContextMenu iContextMenu = (IContextMenu)Marshal.GetObjectForIUnknown(iContextMenuPtr);

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

//获取默认的命令项
int defaultCommand = API.GetMenuDefaultItem(contextMenu, false, 0);

CMINVOKECOMMANDINFOEX invoke = new CMINVOKECOMMANDINFOEX();
invoke.cbSize = Marshal.SizeOf(typeof(CMINVOKECOMMANDINFOEX));
invoke.lpVerb = (IntPtr)(defaultCommand - API.CMD_FIRST);
invoke.lpDirectory = string.Empty;
invoke.fMask = 0;
invoke.ptInvoke = new POINT(MousePosition.X, MousePosition.Y);
invoke.nShow = 1;
iContextMenu.InvokeCommand(ref invoke);


GetMenuDefaultItem 的原型:

[DllImport("user32", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern int GetMenuDefaultItem(IntPtr hMenu, bool fByPos, uint gmdiFlags);


一个 IShellFolder 的默认菜单一般都是“打开”,但有些却不是。所以 lpVerb 不应该直接使用 "open"。

资源管理器

    经过把前几节中的例子修改,大致得到一个资源管理器的原型,但它还有很多问题:

1,不会释放资源
2,无法显示快捷方式、共享等图标标志
3,ContextMenu 某些地方没有处理,例如发送到...
4,拖拉没有实现
5,没有实时监控更改

    因此,要做一个完整的资源管理器,是非常麻烦的事情,你可以参考 C# FileBrowser ,它已经做得非常好了。



源代码:/Files/lemony/WinShell5.rar

以后会讲述一些在资源管理器实现 Shell 操作的内容,希望大家多多支持^_^。

目录
相关文章
|
安全 Java Linux
|
9月前
|
测试技术 API 开发者
Postman 旧版本下载方法全解(图文教程)
本文详解如何下载Postman历史版本,涵盖卸载当前版本、查找官方发布记录及旧版下载链接,并探讨版本管理痛点,引出Apifox等集成化接口测试工具的优势,助力开发测试更高效。
Postman 旧版本下载方法全解(图文教程)
|
虚拟化 Windows
VMwareWorkstationPro16的下载与安装,以及vm账号注册的问题
本文介绍了VMware Workstation Pro 16的下载、安装过程以及VMware账号的注册问题,包括如何检查虚拟化支持是否开启、VMware的下载步骤、注册VM账号时的常见问题以及VMware 16的安装步骤。
VMwareWorkstationPro16的下载与安装,以及vm账号注册的问题
|
存储 安全 数据安全/隐私保护
穿越编程之海:探索谷歌Protocol Buffers库在C++中的应用
穿越编程之海:探索谷歌Protocol Buffers库在C++中的应用
1226 0
|
Linux Shell 开发工具
Openbox+rox+feh+fbpanel+idesk构建桌面系统
Openbox+rox+feh+fbpanel+idesk构建桌面系统
1063 0
|
NoSQL Linux 开发工具
Linux上使用Qt Creator进行C/C++开发
目录[-] 1、安装Qt Creator和基础构建环境(以Ubuntu为例): 2、把自动完成快捷键"Ctrl+空格"改为"Alt+/"或者"Shift+Return"(Return表示Enter键) 3、在Qt Creator中使用make构建,运行,调试通用C/C++项目 4...
3726 0
|
8天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
9天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
763 8
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
2天前
|
缓存 前端开发 API
GLM 5.2 自托管部署实战指南:硬件配置选择、vLLM 推理优化与运营成本分析
智谱这次发布 GLM 5.2 不只是开了个 API。MIT 许可的权重本周也上了 HuggingFace,这意味着头一回有一款前沿级别、1M 上下文的代码模型,你能真正拉下来、审计、跑在自己机器上。代价是机器本身:753B 参数塞不进你桌下的笔记本。

热门文章

最新文章