你能拦截或覆盖docx文件的IPreviewHandler吗?

时间:2016-08-01 20:01:03

标签: winapi com ms-office vsto windows-explorer

在我之前的调查中,我发现即使Windows文件浏览器在嵌入状态下启动word.exe,Documents集合仍然是空的。

Excel and word opened in Windows Explorer preview panel have Workbooks.Count and Documents.Count equal to 0

当我制作嵌入式应用程序visible时,他们会在其中加载一个文档,进行进一步的研究: empty word

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;
        }
    }
}

所以我得出结论,资源管理器只需要启动单词,但它没有托管单词内的文档。这意味着Windows资源管理器可能是IOleContainer。如果为true,则表示可以通过EnumObjects访问预览窗格中嵌入的任何对象。

不幸的是,我的代码在VSTO插件中运行,我无法访问资源管理器com对象,所以我无法为IOleContainer执行QI。但我有一个理论认为,可能有另一种通过PreviewHandler访问Document COM对象的方法。我认为启动Word,Powerpoint和Excel的原因是要注册还是初始化previewHandler?

所以HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ PreviewHandlers有一个与IPreviewHandler相关联的guid列表,用于不同的文件类型。

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

但是我想用自己的替换单词预览处理程序。如果我无法取代它,我会非常乐意拦截现有的预览处理程序。

0 个答案:

没有答案