Winapi 您能否拦截或覆盖docx文件的IPreviewHandler?

Winapi 您能否拦截或覆盖docx文件的IPreviewHandler?,winapi,com,ms-office,vsto,windows-explorer,Winapi,Com,Ms Office,Vsto,Windows Explorer,在我之前的调查中,我发现即使windows文件资源管理器以嵌入状态启动word.exe,文档集合仍然为空 我做了一点进一步的研究,当我制作嵌入式应用程序时,他们会加载其中的一个文档: 所以我得出的结论是,explorer只需要启动word,但它没有在word中托管文档。这意味着windows资源管理器很可能是一个很好的工具。如果为true,则表示嵌入预览窗格中的任何对象都可以通过访问 不幸的是,我的代码在VSTO加载项中运行,我没有访问explorer com对象的权限,因此无法为IOleC

在我之前的调查中,我发现即使windows文件资源管理器以嵌入状态启动word.exe,文档集合仍然为空

我做了一点进一步的研究,当我制作嵌入式应用程序时,他们会加载其中的一个文档:

所以我得出的结论是,explorer只需要启动word,但它没有在word中托管文档。这意味着windows资源管理器很可能是一个很好的工具。如果为true,则表示嵌入预览窗格中的任何对象都可以通过访问

不幸的是,我的代码在VSTO加载项中运行,我没有访问explorer com对象的权限,因此无法为IOleContainer执行操作。但是我有一个理论,可能有另一种方法可以通过PreviewHandler访问文档COM对象。我认为Word、Powerpoint和Excel启动的原因是注册或初始化previewHandler

因此HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PreviewHandler有一个与不同文件类型关联的GUID列表

关于如何为新文件类型创建自己的previewHandler,有很多文章:


但是我想用我自己的替换单词预览处理程序。如果我不能替换它,我将非常乐意拦截现有的预览处理程序。

拦截它的唯一方法是为所需的文件类型编写并注册您自己的PreviewHandler,并将其内部委托给您要替换的先前注册的PreviewHandler。一个文件类型一次只能注册一个PreviewHandler。拦截它的唯一方法是为所需的文件类型写入并注册您自己的PreviewHandler,并将其内部委托给您要替换的先前注册的PreviewHandler。一个文件类型一次只能注册一个PreviewHandler。
public static class WordAppExt
{
    public static Word.Document GetActiveDoc(this Word.Application App)
    {
        try
        {
            App.Visible = true;
            if (App.Documents.Count > 0)
            {
                return App.ActiveDocument;
            }
            else
            {
                return null;
            }
        }
        catch (Exception)
        {
            return null;
        }
    }
}