V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ColinZeb
V2EX  ›  程序员

Windows 11 有没有这样的菜单 Api

  •  
  •   ColinZeb ·
    ColinZeb · 2022-08-12 09:34:14 +08:00 · 4334 次点击
    这是一个创建于 860 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如图,如果能把压缩软件的子菜单实现为类似顶部的快捷按钮,我就打算自己用 7z 实现一个。

    但是没见过别的软件实现过,也不会找 win api ,请教一下各位。 Clip_20220812_092804.png

    17 条回复    2022-08-14 16:10:20 +08:00
    ColinZeb
        1
    ColinZeb  
    OP
       2022-08-12 09:37:14 +08:00
    附加一个补充议题,不知道各位有没有这样的一个解压需求,就是自动解压到某个固定文件夹并打开解压后文件夹,比如下载的各种绿色软件。现在的 360 压缩,bandzip 所谓的自动解压都是自动解压当前目录,但是没实现自动解压到固定 /常用目录
    zed1018
        2
    zed1018  
       2022-08-12 09:42:03 +08:00
    目测是没有的,而且我个人不希望有,不然一堆国产软件肯定无脑注册那块的入口。我个人支持 win11 的新版右键菜单的一部分原因就是一个程序只能注册一个入口,不然右键拉出来一大长溜。
    codehz
        3
    codehz  
       2022-08-12 09:42:37 +08:00
    顶部的就是系统独占的(
    ColinZeb
        4
    ColinZeb  
    OP
       2022-08-12 09:47:48 +08:00
    @zed1018
    @codehz 不是要顶部的,而是单独一行,就比如 winrar 所在这一行。做成排列的
    codehz
        6
    codehz  
       2022-08-12 09:51:58 +08:00
    @ColinZeb #4 那也不行,这个菜单定制能力很弱,只有单行文字+图标,然后顶级菜单也只能是静态的(子菜单内容可以动态决定)
    popok
        7
    popok  
       2022-08-12 09:52:19 +08:00
    @ColinZeb #4 winrar 设置里可以选择不折叠啊,全部显示在同一列。

    而且你需要自己搞这种的话,应该是在注册表里添加的,具体你可以搜一下“右键菜单 注册表”
    weiwei17Ra
        8
    weiwei17Ra  
       2022-08-12 09:57:31 +08:00
    @ColinZeb 你说的不就是自定义 context menu 这个功能吗
    就是右键点击一个对象的时候 重新绘制 右键上下文菜单 加入自己的功能
    这个需要老的 win32
    开发 基本上是 hook explorer 用 c 或者出 c++ .net 开发需要 c 或者出出 c++写的 dll 操作
    你是 github 上找找
    geelaw
        9
    geelaw  
       2022-08-12 10:08:56 +08:00   ❤️ 1
    @weiwei17Ra #8 开发方法应该是 IConextMenu, IDropTarget, IExecuteCommand, IExplorerCommand, IExplorerCommandState 之类的,不需要 hook explorer 。

    如果是静态菜单,有好几种方法:

    https://docs.microsoft.com/en-us/windows/win32/shell/creating-static-cascading-menus

    如果是动态菜单,目前推荐的方法是使用 IExplorerCommand (简单功能),古老的方法是使用 IContextMenu, IContextMenu2, IContextMenu3 (复杂功能)。

    https://docs.microsoft.com/en-us/windows/win32/shell/how-to-implement-the-icontextmenu-interface
    eason1874
        10
    eason1874  
       2022-08-12 10:18:52 +08:00
    Windows 右键菜单在注册表就可以添加,跟数据库管理差不多,也就新建几项,指向你要运行的程序

    你要自定义处理过程,写个 bat 或者 ps1 ,右键菜单 command 指向它就可以,好像传入第一个参数就是对应文件路径。关键词:windows add context menu
    sunhelter
        11
    sunhelter  
       2022-08-12 11:08:36 +08:00
    @zed1018 没有限制一个吧,PowerToys 就注册了 PowerRename 和调整图片大小两个菜单
    mgrddsj
        12
    mgrddsj  
       2022-08-12 11:15:38 +08:00
    @ColinZeb #1 这个需求我可以答,但可能得习惯一下。
    把常用目录固定到快速访问。以后见到压缩包,在文件资源管理器里打开到它的目录,选中压缩包之后,右键按住并拖拽到左侧快速访问里面的目标文件夹。在弹出的窗口里用你喜欢的解压缩软件解压就可以。

    缺点是不能在浏览器里的下载里直接打开压缩包,必须“在文件资源管理器打开到文件目录”。

    这里用 Bandizip + Win 10 举例:


    注意是按住右键拖动压缩包到目标文件夹。
    clf
        13
    clf  
       2022-08-12 11:18:09 +08:00
    我现在 win11 已经是双击解压了。
    zed1018
        14
    zed1018  
       2022-08-12 11:29:41 +08:00
    @sunhelter 具体限制不太清楚,但是确实在哪里看到过,另一方面 powertoys 的工具其实都是独立的。
    ColinZeb
        15
    ColinZeb  
    OP
       2022-08-12 12:55:00 +08:00
    @mgrddsj 这个不错,感谢。

    @eason1874 自定义菜单一直就有,我想要的是一行菜单多个命令,不是多行菜单也不是二级菜单。参考就是 win11 自带的第一行菜单,截图蓝色划线部分
    ikas
        16
    ikas  
       2022-08-13 11:02:36 +08:00
    目前没有这个 api

    右键拖动那个菜单 api,老的写法还能用

    目前新的能用的几乎都是针对 packaging app 的....
    https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/desktop-to-uwp-extensions#context-menu
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5740 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:22 · PVG 11:22 · LAX 19:22 · JFK 22:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.