1

我希望通过 QueryContextMenu 方法(动态动词)的快捷菜单对于“占位符”也可见。占位符是仅在本地虚拟存在的文件,需要从云同步提供商处下载,然后才能读取文件。

出于这个原因,我通过以下方式注册了我的快捷菜单:

HKLM
{
    NoRemove Software
    {
        NoRemove Classes
        {
            NoRemove CLSID
            {
                ForceRemove '%CLSID%' = s '%DESCRIPTION%'
                {
                    InprocServer32 = s '%MODULE%'
                    {
                        val ThreadingModel = s 'Apartment'
                    }
                    SupportedProtocols = s '*'
                    {
                    }
                }
            }
            NoRemove AllSyncRootObjects
            {
                NoRemove ShellEx
                {
                    NoRemove ContextMenuHandlers
                    {
                        ForceRemove '%DESCRIPTION%' = s '%CLSID%'
                    }
                }
            }
        }
    }    
}

如果该文件确实存在于本地,将显示我的上下文菜单条目。但如果它被脱水(转换为占位符),我的上下文菜单条目将不会显示。如何注册我的 ShellExtension,以便它始终显示?我需要设置哪种标志?可悲的是,互联网对此一无所知。

我试图从 Microsoft 的 ClourMirror 示例中学习,它提供了自定义上下文菜单条目,但遗憾的是它们不起作用:https ://github.com/microsoft/Windows-classic-samples/issues/156 。同时,我尝试从“始终保留在此设备上”和“释放空间”上下文菜单条目中学习,这些条目使用标志SkipCloudDownload(value: 0) 和StorageProviderFlagsRequired(value:2) 进行注册,看起来很有希望。特别是SkipCloudDownload,但我在不同的位置设置了这个标志,没有改变。

在项目的当前状态下,由于跨平台兼容性,需要动态动词。感谢任何提示。

4

1 回答 1

1

解决方案是向 COM 对象添加空值“ContextMenuOptIn”:

HKLM
{
    NoRemove Software
    {
        NoRemove Classes
        {
            NoRemove CLSID
            {
                ForceRemove '%CLSID%' = s '%DESCRIPTION%'
                {
                    val ContextMenuOptIn= s ''

                    InprocServer32 = s '%MODULE%'
                    {
                        val ThreadingModel = s 'Apartment'
                    }
                }
            }
            NoRemove AllSyncRootObjects
            {
                NoRemove ShellEx
                {
                    NoRemove ContextMenuHandlers
                    {
                        ForceRemove '%DESCRIPTION%' = s '%CLSID%'
                    }
                }
            }
        }
    }    
}

我在这里找到了解决方案:https ://github.com/pipeline-foundation/projects/issues/97 他们对同一个问题有几个问题,可以通过添加额外的“标志”来解决它。

于 2021-09-16T10:37:30.057 回答