none
如何获取桌面的右键菜单中“新建”的子菜单项? RRS feed

  • 问题

  • 我想要获取这个桌面上的右键菜单,但是我只想保留“新建”这个菜单项,请问大佬们,改如何实现?
    2020年2月27日 12:23

全部回复

  • 没有获得新建菜单的API。

    可以用IShellView::GetItemObject (SVGIO_BACKGROUND) 获得桌面背景菜单的IContextMenu接口,然而新建菜单的文字提示每个语言都不一样。

    桌面窗口可以这么找

    IShellWindows::FindWindowSW SWC_DESKTOP
    
    IDispatch::QueryInterface(IWebBrowserApp)
    
    IWebBrowserApp::QueryInterface(IServiceProvider)
    
    IServiceProvider::QueryService(STopLevelBrowser, IShellBrowser)
    
    IShellBrowser::QueryActiveShellView



    Visual C++ MVP

    2020年2月27日 15:14
    版主
  • 没有获得新建菜单的API。

    可以用IShellView::GetItemObject (SVGIO_BACKGROUND) 获得桌面背景菜单的IContextMenu接口,然而新建菜单的文字提示每个语言都不一样。

    桌面窗口可以这么找

    IShellWindows::FindWindowSW SWC_DESKTOP
    
    IDispatch::QueryInterface(IWebBrowserApp)
    
    IWebBrowserApp::QueryInterface(IServiceProvider)
    
    IServiceProvider::QueryService(STopLevelBrowser, IShellBrowser)
    
    IShellBrowser::QueryActiveShellView



    Visual C++ MVP

    谢谢,那通过桌面背景菜单的IContextMenu接口,继续QueryContextMenu得到的菜单项就还是包含所有的对吧,那不知道能不能去掉其他的菜单项。我其实就是想创建自己的菜单,保留一个“新建”菜单,其他菜单都是自己来自定义。
    2020年2月27日 23:30
  • 你好,

    感谢您在MSDN论坛发帖提问。

    >>继续QueryContextMenu得到的菜单项就还是包含所有的对吧,那不知道能不能去掉其他的菜单项。我其实就是想创建自己的菜单,保留一个“新建”菜单,其他菜单都是自己来自定义。

    在Windows 7和更高版本中,通过注册表设置支持级联菜单实现。

    在Windows 7和更高版本中,有三种创建级联菜单的方法:
    1,使用SubCommands注册表项创建级联菜单
    2,使用ExtendedSubCommandsKey注册表项创建级联菜单
    3,使用IExplorerCommand界面创建级联菜单

    更多内容我建议你可以参考一下链接:
    https://docs.microsoft.com/zh-cn/windows/win32/shell/context-menu-handlers

    Best Regards,

    Jeanine Zhang


    2020年2月28日 3:15
    版主
  • 你可以创建一个临时的菜单,用IContextMenu::QueryContextMenu把系统的菜单项加到你的临时菜单之后把你不要的菜单项去掉。



    Visual C++ MVP

    2020年2月28日 18:08
    版主