首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从C#应用程序中显示Windows资源管理器上下文菜单?

要在C#应用程序中显示Windows资源管理器上下文菜单,您可以使用Windows API(Win32 API)中的IContextMenu接口。以下是一个简单的示例,说明如何实现此功能:

  1. 首先,您需要在C#项目中添加对Windows API的引用。为此,请在项目中添加以下代码:
代码语言:csharp
复制
using System.Runtime.InteropServices;

[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("000214e4-0000-0000-c000-000000000046")]
internal interface IContextMenu
{
    [PreserveSig]
    int QueryContextMenu(IntPtr hMenu, uint indexMenu, int idCmdFirst, int idCmdLast, uint uFlags);

    [PreserveSig]
    int InvokeCommand(ref CMINVOKECOMMANDINFOEX info);

    [PreserveSig]
    int GetCommandString(int idCmd, uint uType, IntPtr pReserved, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMax);
}

[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("000214f4-0000-0000-c000-000000000046")]
internal interface IShellFolder
{
    void ParseDisplayName(IntPtr hwnd, IntPtr pbc, [MarshalAs(UnmanagedType.LPWStr)] string pszDisplayName, ref int pchEaten, out IntPtr ppidl, ref int pdwAttributes);

    void EnumObjects(IntPtr hwnd, uint grfFlags, out IEnumIDList ppenumIDList);

    void BindToObject(IntPtr pidl, IntPtr pbc, [In] ref Guid riid, out IntPtr ppv);

    void BindToStorage(IntPtr pidl, IntPtr pbc, [In] ref Guid riid, out IntPtr ppv);

    void CompareIDs(IntPtr lParam, IntPtr pidl1, IntPtr pidl2);

    void CreateViewObject(IntPtr hwndOwner, [In] ref Guid riid, out IntPtr ppv);

    void GetAttributesOf(uint cidl, [In, MarshalAs(UnmanagedType.LPArray)] IntPtr[] apidl, ref uint rgfInOut);

    void GetUIObjectOf(IntPtr hwndOwner, uint cidl, [In, MarshalAs(UnmanagedType.LPArray)] IntPtr[] apidl, [In] ref Guid riid, IntPtr rgfReserved, out IntPtr ppv);

    void GetDisplayNameOf(IntPtr pidl, uint uFlags, out IntPtr pName);

    void SetNameOf(IntPtr hwnd, IntPtr pidl, [MarshalAs(UnmanagedType.LPWStr)] string pszName, uint uFlags, out IntPtr ppidlOut);
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
internal struct CMINVOKECOMMANDINFOEX
{
    public int cbSize;
    public int fMask;
    public IntPtr hwnd;
    public IntPtr lpVerb;
    public string lpParameters;
    public string lpDirectory;
    public int nShow;
    public int dwHotKey;
    public IntPtr hIcon;
    [MarshalAs(UnmanagedType.LPWStr)]
    public string lpTitle;
    public IntPtr lpVerbW;
    public string lpParametersW;
    public string lpDirectoryW;
    public string lpTitleW;
    public int ptInvoke;
}

[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("000214F2-0000-0000-C000-000000000046")]
internal interface IEnumIDList
{
    [PreserveSig]
    int Next(uint celt, IntPtr rgelt, out uint pceltFetched);

    [PreserveSig]
    int Skip(uint celt);

    [PreserveSig]
    int Reset();

    [PreserveSig]
    int Clone(out IEnumIDList ppenum);
}
  1. 接下来,您可以使用以下代码来显示上下文菜单:
代码语言:csharp
复制

private static class NativeMethods

{

代码语言:txt
复制
public const int CMF_NORMAL = 0x00000000;
代码语言:txt
复制
public const int CMF_DEFAULTONLY = 0x00000001;
代码语言:txt
复制
public const int CMF_VERBSONLY = 0x00000002;
代码语言:txt
复制
public const int CMF_EXPLORE = 0x00000004;
代码语言:txt
复制
public const int CMF_NOVERBS = 0x00000008;
代码语言:txt
复制
public const int CMF_CANRENAME = 0x00000010;
代码语言:txt
复制
public const int CMF_NODEFAULT = 0x00000020;
代码语言:txt
复制
public const int CMF_INCLUDESTATIC = 0x00000040;
代码语言:txt
复制
public const int CMF_EXTENDEDVERBS = 0x00000100;
代码语言:txt
复制
public const int CMF_RESERVED = 0xffff0000;
代码语言:txt
复制
public const int CMD_FIRST = 1;
代码语言:txt
复制
public const int CMD_LAST = 30000;
代码语言:txt
复制
public const int MFS_DISABLED = 0x00000003;
代码语言:txt
复制
public const int MFS_ENABLED = 0x00000000;
代码语言:txt
复制
public const int MFS_UNCHECKED = 0x00000001;
代码语言:txt
复制
public const int MFS_UNHILITE = 0x00000000;
代码语言:txt
复制
public const int MFS_CHECKED = 0x00000008;
代码语言:txt
复制
public const int MFS_HILITE = 0x00000080;
代码语言:txt
复制
public const int MFS_DEFAULT = 0x00001000;
代码语言:txt
复制
public const int S_OK = 0;
代码语言:txt
复制
public const int S_FALSE = 1;
代码语言:txt
复制
public const
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

路径复制

Windows资源管理器,右键单击任何文件,文件夹或文件组,然后显示上下文菜单。在其中,您将看到两个新项目。 ?...通过路径复制添加的项目复制到Windows资源管理器上下文菜单 复制文件/文件夹路径将采用所选文件或文件夹的完整路径,并将其复制到剪贴板。...可以通过在上下文菜单的“路径复制副本”子菜单中选择最后一项来启动它(请参阅用法),也可以通过在Windows“开始”菜单打开“路径复制副本设置”来启动它。这将打开一个带有多个控件的窗口。...启动“设置”应用程序的各个部分 在“命令”选项卡,“命令”列表占用了大部分空间。此列表按菜单显示的顺序显示所有可用的路径复制复制命令。...该名称将用于在上下文菜单显示自定义命令。 接下来,自定义命令必须基于现有的基本命令(2)。这将确定最初如何计算文件路径。 最后,自定义命令可以使用“选项”选项卡(3)进一步操纵路径。

3.4K30
  • ISO镜像文件制作工具AnyToISO Pro for Mac

    Windows上,可以通过光盘的上下文菜单直接Windows资源管理器创建ISO。生成的ISO映像将包含与源磁盘上显示的文件系统相同的文件系统。...引导信息(如果显示)也保存在ISO。最终的ISO映像始终可以使用AnyToISO提取或在另一个磁盘上刻录。...然后在“文件夹到ISO”选项卡下选择应用程序的文件夹(在Windows,可以在资源管理器右键单击文件夹)。建议选择所需的卷标。...4.AnyToISO与Windows资源管理器集成AnyToISO通过向支持的文件,光学CD / DVD /蓝光光盘和普通文件夹添加上下文菜单,与Windows资源管理器透明地集成。...5.AnyToISO与Apple Finder集成MacOS上的AnyToISO透明地与Apple Finder集成,将其自身添加到支持文件的 “打开方式”菜单

    6.8K30

    Spread for Windows Forms快速入门(1)---开始使用Spread

    在模板列表,选择Windows窗体应用程序。 b. 在名称框,写下新建工程的名称。默认的第一个Windows Forms应用程序名称为WindowsApplication1。 c....在地址框,使用指定的路径为地址路径,或者点击浏览改变路径为一个新的目录。 d. 点击确定。 如果你的工程不显示解决方案资源管理器视图菜单,选择解决方案资源管理器。 5....在解决方案资源管理器,在表单名称Form1上点击右键。在弹出的菜单中选择重命名,并输入你想要的新表单的名称。 下一步,把Spread控件添加到工具箱。这个操作只需要做一次。 1....如果工具箱没有显示出来,在视图菜单里选择工具箱项。 2....查找文档和获得帮助 在你学习和使用Spread for Windows Forms的过程,如果遇到问题,可以如下渠道查看文档或获得帮助: 1)进入联机帮助 在Visual Studio .NET

    2.6K100

    使用Visual Studio Code开发.NET Core看这篇就够了

    右键单击解决方案(在Solution Explorer窗格),然后从上下文菜单中选择Add new project选项。这将列出.NET CLI提供的可用项目类型(请参见下图)。...请记住项目模板中选择控制台应用程序。 现在我们需要在控制台应用程序添加类库项目的引用。右键单击控制台应用程序项目,然后从上下文菜单中选择“添加引用”选项。...,然后从上下文菜单中选择“运行”选项。...要通过Solution Explorer扩展添加项目,请右键单击解决方案,然后 从上下文菜单中选择“ 添加新项目 ”。...Visual Studio Code顺畅的调试.NET Core应用程序 在这部分,我们将了解如何在Visual Studio Code顺畅的调试.NET Core应用程序

    5.6K00

    使用C#创建Windows服务

    一、开发环境 操作系统:Windows 10 X64 开发环境:VS2015 编程语言:C# .NET版本:.NET Framework 4.0 目标平台:X86 二、创建Windows Service...; } } } } 4、双击项目“MyWindowsService”进入“MyService”设计界面,在空白位置右击鼠标弹出上下文菜单,选中“添加安装程序...8、鼠标右键点击项目“MyWindowsService”,在弹出的上下文菜单中选择“生成”按钮,如下图所示: ? 9、至此,Windows服务已经创建完毕。...5、由于需要安装服务,故需要使用UACAdministrator的权限,鼠标右击项目“WindowsServiceClient”,在弹出的上下文菜单中选择“添加”->“新建项”,在弹出的选择窗体中选择...13、点击“卸载服务”按钮,将会服务删除MyService服务。 14、以上启动及停止服务将会写入D:\MyServiceLog.txt,内容如下所示: ?

    1.6K00

    Windows一款效率神器,尤其是一键复制路径

    软件介绍 Shell是一个用于管理 Windows 文件资源管理器上下文菜单的开源程序。它扩展了Windows右键菜单的功能,支持所有文件系统对象,如文件、文件夹、桌面和任务栏。...Shell提供了一系列提升效率的功能,包括拷贝文件地址、快速打开目录、终端打开、自定义外观以及复杂的嵌套菜单等。软件免费、无广告、轻巧,方便用户自定义修改Windows上下文菜单。...9.支持复杂的嵌套菜单。 10.支持多列显示。 11.快速、便捷地在纯文本配置文件。 12.资源占用最小。 13.没有功能限制。 使用步骤 1.GitHub链接下载并安装Shell。...使用场景 1.加速访问常用文件、文件夹或应用程序。 2.快速查看或复制文件路径。 3.自定义菜单项以方便日常操作。 4.修改或删除繁杂的上下文菜单项目。...5.提升Windows资源管理器的整体用户体验。 6.为特定任务或工作流程创建定制化的上下文菜单功能。

    25010

    Web API--入门--(一)ASP.NET Web API 2(C#)入门

    前端网页使用jQuery显示结果。 ? 启动Visual Studio并从“ 开始”页面选择“ 新建项目”。或者,文件菜单中选择新建,然后选择项目。...在“ 模板 ”窗格,选择“已安装的模板”并展开Visual C#节点。在Visual C#下,选择Web。在项目模板列表,选择ASP.NET Web应用程序。...此外,客户端可以通过在HTTP请求消息设置Accept头来指示所需的格式。 我们先来创建一个代表产品的简单模型。 如果解决方案资源管理器尚未显示,请单击查看菜单,然后选择解决方案资源管理器。...在解决方案资源管理器,右键单击Models文件夹。从上下文菜单,选择添加,然后选择类。 ? 将类命名为“产品”。将以下属性添加到Product类。...在解决方案资源管理器,右键单击项目,然后选择添加,然后选择新建项。 ? 在添加新项目对话框,选择Visual C#下的Web节点,然后选择HTML页面项目。

    4.2K10

    24.5K Star,Windows 资源管理神器!

    又是元气满满新的一周,大家要加油哦~~ 对于 Windows 自带的资源管理器,想必大家应该都深有感触~~~ 最近小妹在逛 GitHub 的时候,发现了一款第三方资源管理器,目前 Github 上收获了...简介 Files 是一款开源免费漂亮的资源管理器,主要是 C# 实现的。 小妹体验了一下,感觉非常的不错。...界面美观简洁,与 Windows 10 主题非常契合,用起来也是丝滑流畅,不管是切换文件夹,还是删除文件体验都十分完美。...小妹觉得,Files 会是 windows 最佳的文件管理器。...下面就来一睹她的风采~~~ 多标签 双栏显示 上下文菜单扩展 自定义主题 安装体验 Files 可以直接通过微软商店下载该软件,也可以官网下载独立安装包进行安装。

    67210

    Windows 11的这19个新功能,你都知道吗?

    10、文件资源管理器布局更新 经典文件资源管理器的默认布局已更新,带有额外的填充以改善触摸屏体验。 如果你更喜欢旧的布局,微软添加了一个名为“使用紧凑模式”的新选项,可以文件夹视图选项访问。...我们在资源管理器得到了一些圆角。例如,右键单击(上下文菜单)已更新为圆角和类似 Fluent Design 的阴影效果。...11、设置更改文件类型 新的 Windows 设置应用程序将最终改进“选择默认应用程序菜单。...通常,它效果很好,但自动过程有时会选择错误的应用程序,或者您可能不小心在“打开方式”弹出菜单中选择了错误的应用程序。到目前为止,“打开方式”菜单更改文件类型的手动过程一直很烦人。...作为这项工作的一部分,Microsoft 还将文件资源管理器移到了“开始”菜单的自己位置。

    3.6K20

    Win11 的这 19 个新功能,你都用上了吗?

    10、文件资源管理器布局更新 经典文件资源管理器的默认布局已更新,带有额外的填充以改善触摸屏体验。 如果你更喜欢旧的布局,微软添加了一个名为“使用紧凑模式”的新选项,可以文件夹视图选项访问。...我们在资源管理器得到了一些圆角。例如,右键单击(上下文菜单)已更新为圆角和类似 Fluent Design 的阴影效果。...11、设置更改文件类型 新的 Windows 设置应用程序将最终改进“选择默认应用程序菜单。...通常,它效果很好,但自动过程有时会选择错误的应用程序,或者您可能不小心在“打开方式”弹出菜单中选择了错误的应用程序。到目前为止,“打开方式”菜单更改文件类型的手动过程一直很烦人。...作为这项工作的一部分,Microsoft 还将文件资源管理器移到了“开始”菜单的自己位置。

    23.6K30

    Visual Studio 2008 每日提示(三十七)

    同时,vs还会提示你,是否“最近的项目”删除不存在的项目或解决方案 如果你想从“最近的文件”和“最近的项目”(菜单)移除项也可以用如下方法。...:工具+宏+宏资源管理器,在宏资源管理器中新建一个Module (模块)文件。...如果你想在搜索结果移除搜索关键字的高亮显示 文档窗口的菜单:工具+选项+常规,不选中“突出显示搜索条件”项 如果你想按包含源代码的搜索结果进行排序。...如果你想减少一些搜索结果,在文档窗口菜单:工具+选项+常规,不选中“本地搜索结果包含部分匹配项”项。 设置后,你会发现只有9个结果了 评论:这样定制避免了看那么多搜索结果。...例如在c#里,“class”关键字的动态帮助清单如下, 在winform设计的一个button,改变文本内容,动态帮助如下 打开动态帮助,菜单:帮助+动态帮助 评论:动态帮助会给开发带来不少的方便。

    1.4K60

    Visual Studio 2017 15.8 版发行说明

    缩短在大型解决方案卸载和重载一小组 C# 和 VB 项目的时间 - 数分钟缩短到数秒钟。...在 CPU 使用情况主视图中选择函数时,可从上下文菜单显示“模块/函数”视图,也可以“调用树”或“调用方/被调用方”视图的“查看”下拉列表显示“模块/函数”视图。...(图 6)发布摘要附加 Snapshot Debugger 适用于通用 Windows 平台开发的工具 在 Windows 10 Fall Creators Update(内部版本 16299)或更高版本的目标平台版本...(图 11)启用 Docker 支持 或者,可以通过解决方案资源管理器项目的上下文菜单对现有项目启用 Docker 支持(图 12)。...测试资源管理器方面的改进 选中层次结构视图中的某个分组时,测试资源管理器显示更详细的测试状态摘要窗格(测试资源管理器的下窗格)。 该窗格现显示该分组失败、通过或未运行的测试数量。

    8.2K10

    如何使用 VS Code开发.NET Core应用程序

    在这篇文章,我们将学习有关使用 Visual Studio Code开发,调试,测试和部署ASP.NET Core应用程序的信息,它将包括: •安装必须的插件•创建一个.NET Core 应用程序如何运行项目...安装必要的插件 1.安装 C# extensions[1] ,这是开发 .NET Core应用程序所必需的,要打开扩展程序列表,请选择菜单左侧的扩展程序图标,或使用 Ctrl + Shift + X...通过使用命令行工具,我们只能运行源代码, 它不会在浏览器附加VS Code来显示结果,如果要浏览器与编辑器连接,我们应该在dotnet run命令中使用一些附加命令,因此,最好使用内置选项在VS Code...如何设置断点和调试源 VS Code的断点与Visual Studio的断点相同,我们可以在代码的左侧来设置断点。...我们演示了如何在VS Code 运行和调试.NET Core 项目,虽然现在的支持和体验还不是很好,但是 VS Code 的优势在于轻量级和灵活性,希望以后在VS Code 上写C#也可以得心应手。

    2.4K20

    微软官方开发的实用工具,让你的Windows体验更加高效便捷

    启用后,应用程序将管理计算机的唤醒状态。 虽然 PowerToys Awake 可以无限期或暂时地使计算机保持清醒状态,但在其默认状态下,连接到计算机的显示器将关闭。...如果需要显示可用,请使用 开关上的 “保留”屏幕,这将保持显示活动状态。 仅当唤醒在三 个“保持唤醒 ”状态之一运行时,此功能才有效。...颜色选择器 系统范围的颜色选取实用工具,用于 Windows 任何屏幕选取颜色,并将其以可配置格式复制到剪贴板。...在文件资源管理器中选择 Windows 一个或多个文件或目录。如果选择目录,也会扫描其所有文件和子目录。...右键单击所选文件,菜单中选择“ 显示更多选项 ”展开菜单选项列表,然后选择 “使用此文件的内容” 打开 File Locksmith 并查看正在使用该文件的进程。

    61540

    ASP.NET Core 入门教程 1、使用ASP.NET Core 构建第一个Web应用

    浏览器 Chrome 69 3、前置知识 你可能需要的前置知识 VS Code + .NET Core快速开始 https://ken.io/serie/dotnet-core-quickstart C#...如果你用的macOS,直接拖动到应用程序目录即可,更简单快捷。 3、VS Code配置 基础扩展安装 扩展 说明 C# 包括语法高亮显示、智能感知、定义、查找所有引用等。调试支持。...这时候,可以看一下左侧资源管理器,我们可以看到.vscode目录添加了两个配置文件:launch.json,tasks.json。...ConfigureServices 用于配置应用启动时加载的Service Configure 用于配置HTTP请求管道 web项目模板默认在项目启动的时候调用IApplicationBuilder.run方法,在当前HTTP上下文...(HttpContext)输出了Hello World!

    1.8K40

    C# 创建Windows服务demo

    一、准备工作 1.操作系统:Windows 10 X64 2.开发环境:VS2017 3.编程语言:C# 4. .NET版本:.NET Framework 4.5 二、创建Windows Service...; } } 3.双击项目“MyWindowsService”进入“MyService”设计界面,在空白位置右击鼠标弹出上下文菜单,选中“添加安装程序”,如下图所示...6.鼠标右键点击项目“MyWinsService”,在弹出的上下文菜单中选择“生成”按钮,生成我们自己的windows服务了。...安装服务,需要使用UACAdministrator的权限,鼠标右击项目,在弹出的上下文菜单中选择“添加”->“新建项”,在弹出的选择窗体中选择“应用程序清单文件”并单击确定,如下图所示: ?...6.整个过程完成了,现在我们可以启动项目了,启动后可能会弹出如下所示的窗体(有的系统因UAC配置有可能不显示),需要用管理员权限打开: ? 7.重启项目之后就可以了。

    84510
    领券